状态包含在反应还原操作中,而不是包含在还原操作中



我正在从文档中的todo示例学习react-redux,不明白为什么nextTodo的id保存在actions而不是reducer中。这难道不应该被认为是状态吗?因为随着任务的增加,它会随着时间的推移而改变。对我来说,操作的目的是从用户获取一些输入并将其转换为操作,而不是生成状态。reducer的工作是创建状态并根据给它的动作来改变它。

操作代码

let nextTodoId = 0
export const addTodo = (text) => {
  return {
    type: 'ADD_TODO',
    id: nextTodoId++,
    text
  }
}
<<p> 减速器代码/strong>
const todo = (state, action) => {
  switch (action.type) {
    case 'ADD_TODO':
      return {
        id: action.id,
        text: action.text,
        completed: false
      }
...
}

这是因为期望reducer是一个纯函数。也就是说,如果使用相同的参数多次运行它,它将返回相同的结果,并且应用程序其余部分的状态不会改变。

由于这个原因,reducer不能确定ID,如果它确定了,它将导致重复运行具有不同的结果(即不同的返回值)。

reducer的工作不是创建状态。它的工作是获取现有状态和增量(即一个动作),并返回一个新状态。

最新更新