我正在从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/