所以我正在阅读关于 Reducers 主题的 redux 文档,他们提到它应该是纯函数。我知道这是为了比较状态对象是相同的还是旧的。但我在Redux Reducers 文档中注意到以下代码片段
case TOGGLE_TODO:
return Object.assign({}, state, {
todos: state.todos.map((todo, index) => {
if (index === action.index) {
return Object.assign({}, todo, {
completed: !todo.completed
})
}
return todo
})
})
在这里,他们直接访问 state.todos 数组并使用 map 运算符。这意味着 map 将更新传递的 state 参数。考虑到 reducer 在这里是纯函数,我们不应该在这里更新参数本身吗?
为什么我们/他们没有像下面这样使用 slice()?
case TOGGLE_TODO:
return Object.assign({}, state, {
todos: state.todos.slice().map((todo, index) => {
if (index === action.index) {
return Object.assign({}, todo, {
completed: !todo.completed
})
}
return todo
})
})