Итак, я просматривал документацию redux по Reducers topi c, и они упомянули, что это должны быть чистые функции. Я понимаю, что это для сравнения того, является ли объект состояния таким же или старым. Но я заметил следующий фрагмент кода в документации 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 и используют оператор карты. Это означает, что карта обновит переданный параметр состояния. Учитывая, что здесь 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
})
})