我正在学习{-3}}中的todo示例中的react-redux,并且不明白为什么nextTodo的id保存在actions
而不是reducer
中。这不应该被视为国家,因为随着更多的待办事项增加,它会随着时间的推移而改变吗?对我来说,动作的目的是从用户获取一些输入并将其转换为动作,而不是生成状态。减速器的工作是创建状态并根据给定的动作进行更改。
行动守则
let nextTodoId = 0
export const addTodo = (text) => {
return {
type: 'ADD_TODO',
id: nextTodoId++,
text
}
}
减速机代码
const todo = (state, action) => {
switch (action.type) {
case 'ADD_TODO':
return {
id: action.id,
text: action.text,
completed: false
}
...
}
答案 0 :(得分:3)
那是因为减速器有望成为纯粹的功能。也就是说,如果使用相同的参数多次运行它,它将返回相同的结果,并且应用程序其余部分的状态不会更改。
由于这个原因,reducer无法确定ID,就好像它一样,它会导致重复运行有不同的结果(即不同的返回值)。
减速器的工作不是创造状态。它的工作是获得现有状态和增量(即动作)并返回新状态。它应该可靠地完成。