javascript - 状态包含在 React Redux Actions 中与包含在Reducer 中

标签 javascript reactjs redux state react-redux

我正在从docs中的todo示例学习react-redux并且不明白为什么 nextTodo 的 id 保存在 actions 中而不是 reducer 中。难道这不应该被视为状态吗,因为随着更多待办事项的添加,它会随着时间的推移而变化?对我来说, Action 的目的是获取用户的一些输入并将其转换为 Action ,而不是生成状态。 reducer 的工作是创建状态并根据给定的操作更改它。

操作代码

let nextTodoId = 0

export const addTodo = (text) => {
  return {
    type: 'ADD_TODO',
    id: nextTodoId++,
    text
  }
}

reducer 代码

const todo = (state, action) => {
  switch (action.type) {
    case 'ADD_TODO':
      return {
        id: action.id,
        text: action.text,
        completed: false
      }
...
}

最佳答案

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

因此,reducer 无法确定 ID,否则会导致重复运行得到不同的结果(即不同的返回值)。

reducer 的工作不是创建状态。它的工作是获取现有状态和增量(即操作)并返回新状态。它应该可靠地做到这一点。

关于javascript - 状态包含在 React Redux Actions 中与包含在Reducer 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39027942/

相关文章:

javascript - react : Problems importing reducer function

php - 在 Laravel 中使用节点模块

javascript - 使用 javascript 检查文件夹内图像文件的数量

javascript - 为什么单击 Go 按钮后文本字段和按钮消失了?

javascript - 从 HTTPS 到 HTTP 的请求在 IE 中 Ajax 调用失败

javascript - 删除所有 Drupal 7 页面的 <head> 中的 &lt;script&gt; 标记

reactjs - 在单元测试中,dispatch(action) 不会立即更新 redux 状态

redux - react + Redux + SSR : Cannot find store only when navigating directly to connected component

react-native - 当 native 应用程序启动时,将初始状态从 API 调用传递到 createStore

typescript - typescript 中可选的必需参数