关于redux里connect函数的几个问题

#1

最近在学习redux相关的一些知识,然后在一个小项目中遇到了如下的代码:

const mapStateToProps = (state) => {
  return {
    todos: selectVisibleTodos(state.todos, state.filter)
  };
}

const mapDispatchToProps = (dispatch) => {
  return {
    onToggleTodo: (id) => {
      dispatch(toggleTodo(id));
    },
    onRemoveTodo: (id) => {
      dispatch(removeTodo(id));
    }
  };
};


export default connect(mapStateToProps, mapDispatchToProps)(TodoList);

我的疑问:请问 两个函数中的参数 statedispatch是在connect中输入的吗,但是我在其他地方并没有提供state啊?!另外,我在查阅connect的源码时并没有看到相关的调用(或许是我查看的姿势不对),请各位大神指点一下!!

#2

根组件用Provider传入了store,使所有子组件都能获取state和dispatch

#3

:sweat_smile:这么说我需要去看一下Provider组件相关的源码吗,我用得不多,对这方面不是很熟悉

#4

我写了偏关于redux的文章,楼主可以参考一下: https://github.com/YutHelloWorld/Blog/issues/3

#5

好的,谢谢你,我晚上去看一下:grin:

#6

额,正好前几天看啦源码,我来简单回答一下。connect 调用你传入mapStateToProps和mapDispatchToProps 方法,然后把分别把state和dispatch传入,这两个方法同时还能接受第二个参数props。
源码位置 react-redux src/components/connect.js

38: const mapState = mapStateToProps || defaultMapStateToProps
42: mapDispatch = mapDispatchToPropsconst
115: const mappedState = mapState(store.getState(), props)
148: const mappedDispatch = mapDispatch(store.dispatch, props)

https://github.com/hammer110/react-seed-project/wiki/react-redux-connect源码解析
这个是我写的一篇react-redux源码分析 ,文笔比较拙劣,希望能帮助到你。

#7

好的,谢谢你:)

#8

看一下使用connect后的渲染结果,会有利于你理解他的作用。