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值

    1. const connect = (mapStateToProps) => (People) => {
    2. class Connect extends Component {
    3. static contextTypes = {
    4. store: PropTypes.object
    5. }
    6. constructor () {
    7. super()
    8. this.state = { allProps: {} }
    9. }
    10. componentWillMount () {
    11. const { store } = this.context
    12. this.setProps();
    13. store.subscribe(() => this.setProps());
    14. }
    15. setProps () {
    16. const { store } = this.context
    17. let stateProps = mapStateToProps(store.getState(), this.props) // 额外传入 props
    18. this.setState({
    19. allProps: { // 整合普通的 props 和从 state 生成的 props
    20. ...stateProps,
    21. ...this.props
    22. }
    23. })
    24. }
    25. render () {
    26. return <People {...this.state.allProps} />
    27. }
    28. }
    29. return Connect
    30. }

    React Context: 类似js 上下文 不过 是带权限的 得通过一定的规则来实现
    弊端:增加了组件的耦合性 子组件必须依赖 父组件传递的 context

    https://blog.csdn.net/c_kite/article/details/79018469