react-redux简单实现

2019-03-14  本文已影响0人  Mr无愧于心

Provider组件的实现

class Provider extends React.Component {
    //设置上下文信息类型
    static childContextTypes={
        store:PropTypes.object,
    }
    //设置上下文信息
    getChildContext(){
        return this.props.store;
    }

    constructor(props,context){
        super(props,context);
    }
    render(){
        return this.props.children;
    }
}

connect函数的实现

function connect(mapStateToProps,mapDispatchToProps){
    return function (Component){
        return class Proxy entends React.Component{
            //获取上下文的store
            static contextTypes={
                store:PropTypes.object;
            }
            constructor(props,context){
                super(props,context);
                this.state=this.queryProps()//把所有返回值赋值给组件的 状态 用于传递给组件
            }
            conponentDidMount(){//组件渲染结束后,当状态改变,重新获取最新的状态信息,重新把component渲染,把新的状态信息通过属性传递给component
                this.context.store.subscribe(()=>{
                    this.setState(this.queryProps());
                })
            }
            render(){
                return <Component {...this.state}></Component>
            }
            //执行mapStateToProps,mapDispatchToProps,拿到所有返回值,合并成一个新对象
            queryProps(){
                let store=this.context.store;
                let mapState=typeof mapStateToProps == 'function'?mapStateToProps(store.getState()):{};
                let mapDispatch=typeof mapDispatchToProps == 'function'?mapDispatchToProps(store.dispatch):null;
                return {...mapState,...mapDispatch}
            }
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读