关于对redux的理解,求大神指点迷津。。

function mapStateToProps(state) {
  console.log(state);//打印不出来会报错,为什么?
  const {user, messages} = state;//这个user,message是根据什么来的
  return {user, messages};
}

export default connect(mapStateToProps)(SlotContainer);//这个connect函数是怎么工作的?

connect(mapStateToProps)这里面mapStateToProps没有传参数啊,在connect执行的时候mapStateToProps是怎么工作的

阅读 2.9k
3 个回答

这个可以去看看react-redux源码里的connect,挺好理解的,他其实是把mapStateToProps作为参数传递给connect,然后在connect里调用的时候又把state作为参数传给了他

简单贴几段源码

//设置mapState
const mapState = mapStateToProps || defaultMapStateToProps

//调用,调用的时候传了参数
const mappedState = mapState(store.getState(), props)

打印不出来会报错,为什么?
报的什么错?把报错内容贴出来。connect写法没问题,估计报错是因为没有store?你的组件有没有被<Provider />包裹?

这个user,message是根据什么来的?
这个是ES6的语法,叫做Destructuring

const {user, messages} = state;
// 等同于
const user = state.user;
const messages = state.messages;

这个connect函数时做什么工作的?
connect是react redux的一个方法,使用HOC模型对当前组件进行包裹,用来连接redux store和当前组件的。他会负责从mapStateToProps,mapDispatchToProps拿到的结果 和 父级组件传下来的props 合并,然后传递给当前组件。

mapStateToProps,这里的State指的是Redux里的state。这里的props指的是当前组件获取的props。当初始化的时候和redux的state发生改变的时候,会调用这个方法,更新当前组件的props.

state这个是redux中store中的值,只要state发生了改变,那么页面就会进行更新。而connect是redux中的方法,就是链接store和你的组件,使之相互通信。这也是精要之处。一旦通信后,reducer中的初始值state就会作为你组件里面的props,这样你就可以进行处理参数了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题