Store:整个程序的状态/对象树保存在 Store 中,一个工程只有一个 store。具有以下方法供使用:
State:数据
Action:用来描述发生了什么事情的对象。作为一个行为载体,用于映射相应的 Reducer,可以成为数据的载体,将数据从应用传递至 store 中,是 store 唯一的数据源
Action Creator
Reducer:确定状态将如何变化的地方。描述如何修改数据的纯函数,Action 属于行为名称,而 Reducer 便是修改行为的实质
创建一个状态中心(state),通过纯函数来对状态中心的数据进行修改,然后将修改后的结果以发布订阅的方式通知到所有订阅者,从而达到一个共享状态的效果
Redux 的核心是函数式编程,使用无副作用的同步函数 action 来触发 reducer 对数据进行修改
Redux 的创建函数是 createStore,这个函数的作用是创建一个 store 对象,其中关键步骤是
Redux 中间件的原理就是 Decorator 装饰器模式,将中间件经过一些装饰器(中间件)装饰以后,返回一个增强型的 dispatch
const connect = (mapStatetoProps, mapActionstoProps) => (WrapperComponent) => {
return class Connect extends Component {
static contextType = storeContext; // provide 定义的 context 对象
constructor(props) {
super();
}
componentWillMount() {
const store = this.context;
store.subscribe(this._updateProps);
this._updateProps(); // 初始化
}
_updateProps = () => {
const store = this.context;
// 传入state和props
const stateProps = mapStatetoProps ? mapStatetoProps(store.getState(), this.props) : {};
// 传入dispatch和props
const actionProps = mapActionstoProps ? mapActionstoProps(store.dispatch, this.props) : {};
//整合props,传给接收的组件
this.setState({
allProps: {
...stateProps,
...actionProps,
...this.props,
},
});
};
render() {
return <WrapperComponent {...this.state.allProps} />;
}
};
};