一. Basics
- Actions(纯js对象):从application中发送数据到内存使用store.dispatch(),是信息的payloads,必须有type属性(string常量),所有Action存储在Array中,建议使用
- ActionCreators:返回一个action(Todo),需要调用
执行生成action:dispatch(addTodo(text))才执行,并非自动初始化
—> 执行action:(bound action creator)const boundAddTodo = text => dispatch(addTodo(…))
—> bound AddTodo(text):使用React-redux的connect();bindActionCreators():捆绑action creators到dispatch()函数 - SourceCode
二.Reducers:action未定义state如何改变,用以改变state
- Designing the State Shape
所有的state都作为一个单独的对象:(1)the currently selected visibility filter;(2)the actual list of todos
状态树:数据和UI状态分开 - Handling Actions
(1)(previousState,action) => newState
pure function:同样参数值,函数输出相同的结果,结果的求值不会促使任何可语义上的可观察的副作用或输出
(2)redux会调用reducer,为未定义的initialState,首次不赋值 e.g todo:[]
(3)不改变state,创建父本Object.assign()
Object.assign({必须为空},state,…)1
2
3
4function todoApp(state = initial(state,action){
-> newState
-> default: 原state
})
(4)使用对象扩展语法的优点在组成复杂对象时会更明显1
2
3return getAddIds(state.cart.map(id => ({
_____,______
})))