在这个减速机组成的例子中,为什么我们不能只返回我们正在调用的减速机?意思是在todoApp
减速机的情况下ADD_TODO
或TOGGLE_TODO
我们使用的是其他减速机:todos
。我明白那个。但我不明白为什么我们不能只是设置的情况下在todoApp
作为Reducer组成 - 为什么我们需要重新分配todos与Object.assign()为什么不只是调用其他reducer?
function todoApp(state = initialState, action) {
switch (action.type) {
case ADD_TODO:
case TOGGLE_TODO:
return todos(state.todos, action)
VS我们这里:
function todoApp(state = initialState, action) {
switch (action.type) {
case ADD_TODO:
case TOGGLE_TODO:
return Object.assign({}, state, {
todos: todos(state.todos, action)
})
特别是自待办事项减速器返回焕发出新的状态对象, 对?我们是不是仍然遵循redux规则,而不是通过返回第二个reducer的结果来修改状态?
function todos(state = [], action) {
switch (action.type) {
case ADD_TODO:
return [
...state,
{
text: action.text,
completed: false
}
]
case TOGGLE_TODO:
return state.map((todo, index) => {
if (index === action.index) {
return Object.assign({}, todo, {
completed: !todo.completed
})
}
return todo
})
default:
return state
}
}
function todoApp(state = initialState, action) {
switch (action.type) {
case SET_VISIBILITY_FILTER:
return Object.assign({}, state, {
visibilityFilter: action.filter
})
case ADD_TODO:
case TOGGLE_TODO:
return Object.assign({}, state, {
todos: todos(state.todos, action)
})
default:
return state
}
}
所以如果形状相同,这将是好的,我不会修改状态,否则,是正确的? – Turnipdabeets
@AnnaGarcia更新了我的答案以解决您的问题 – naomik