react-redux 暴露出Connect 组件,和 Provider 组件,
react中数据流 都是父子传值 跨级传值 用到 React Context
自定义组件 中@connect(mapStateToProps、mapDispatchToProps)就是在自己组件外部包了一成Connect 然后Connect(通过React Content)接受到 Provider 组件的store值 的到对应的state和dispatch 然后传递给 自定义组件
mapStateToProps:调用了store.subscribe 方法,将同步数据方法(store.getSate)添加到store的Listeners方法数组中 dispatch调用改变store中currentState的值的时候 会循环调用Listeners中的方法store.getSate 重新获取store中的state值
const connect = (mapStateToProps) => (People) => {class Connect extends Component {static contextTypes = {store: PropTypes.object}constructor () {super()this.state = { allProps: {} }}componentWillMount () {const { store } = this.contextthis.setProps();store.subscribe(() => this.setProps());}setProps () {const { store } = this.contextlet stateProps = mapStateToProps(store.getState(), this.props) // 额外传入 propsthis.setState({allProps: { // 整合普通的 props 和从 state 生成的 props...stateProps,...this.props}})}render () {return <People {...this.state.allProps} />}}return Connect}
React Context: 类似js 上下文 不过 是带权限的 得通过一定的规则来实现
弊端:增加了组件的耦合性 子组件必须依赖 父组件传递的 context
