nop*_*ole 3 redux redux-reducers
Redux中reducer的一条规则是:我们应该将状态视为只读,并返回一个新对象作为新状态。
但有一个灰色地带:它必须严格返回一个新对象作为状态,还是我们可以返回相同的状态对象?
看来通过查看常见代码,例如:
function favoriteColors(state, action) {
if (state === undefined) {
state = [];
}
if (action.type === 'ADD') {
return Array.from(new Set([...state, action.color])); // new array
} else if (action.type === 'REMOVE') {
return state.filter(color => color !== action.color); // new array
} else {
return state;
}
}
Run Code Online (Sandbox Code Playgroud)
当action.type未知时,则返回相同的状态对象。因此规则是,reducer 并不严格必须返回一个新的状态对象,但可以返回相同的状态对象。但严格的规则是状态必须是只读的?
规则是您不得改变状态对象,因为这可能会破坏代码中其他地方所做的假设。返回相同的状态对象是可以的。
function goodReducer(state, action) {
return state;
}
Run Code Online (Sandbox Code Playgroud)
function badReducer(state, action) {
state.counter = (state.counter || 0) + 1;
return state;
}
Run Code Online (Sandbox Code Playgroud)
这样做的原因是为了确保渲染的 DOM 正确且是最新的,状态的更新必须流经调度程序。
尤其:
shouldComponentUpdate)render)返回未修改的状态就可以了。事实上,像 Immutable.js 这样的库经常会这样做。
| 归档时间: |
|
| 查看次数: |
1380 次 |
| 最近记录: |