短暂回顾了下redux基本知识点:
- provider和connect,前者负责把store传到子组件,后者负责接受props中的store并通过props注入到子组件中
- store的创建可以需要一个reducer,类似于菜谱,定义了各种操作(action)并且修改原料库存(state),reducer需要传入一个初始state
// 首先定义一个改变数据的plain函数,成为reducer
function count (state, action) {
var defaultState = {
year: 2015,
};
state = state || defaultState;
switch (action.type) {
case 'add':
return {
year: state.year + 1
};
case 'sub':
return {
year: state.year - 1
}
default :
return state;
}
}
// store的创建
var createStore = require('redux').createStore;
var store = createStore(count);
// store里面的数据发生改变时,触发的回调函数
store.subscribe(function () {
console.log('the year is: ', store.getState().year);
});
// action: 触发state改变的唯一方法(按照redux的设计思路)
var action1 = { type: 'add' };
var action2 = { type: 'add' };
var action3 = { type: 'sub' };
// 改变store里面的方法
store.dispatch(action1); // 'the year is: 2016
store.dispatch(action2); // 'the year is: 2017
store.dispatch(action3); // 'the year is: 2016
- connect调用需要两个方法作为参数,mapStateToProps和mapDispatchToProps,这两个函数定义在使用connect的父组件中,作用是把state和action方法传到下一层子组件 前者的形式比较简单,可以选一些子组件用得到的属性传进去
const mapStateToProps = (state) =>
{
return { count: state.count }
}
后者的实现稍微复杂一些,dispatch类似于promise创建时的resolve参数,定义在connect源码内部,不用太关心,这里的dispatch可以是同步的,也可以是异步的
function mapDispatchToProps(dispatch) {
return {
sendTheAlert: () => {dispatch(ALERT_ACTION)}
}
}
dispatch调用action后就会扔给store里的reducer来处理对应的action,从而使得state改变