首页 > 解决方案 > React-Redux 示例有一个非纯函数。我认为减速器必须是纯的?

问题描述

Redux 说处理状态的动作(Reducers)必须是 pure

不过,查看 React-Redux 文档,他们展示了如何将新的 Todo 任务添加到 Todo 列表中,并且该函数会为新的 Todo 任务生成一个新的标识符。这显然不是纯粹的。再次调用相同的函数将不会产生相同的输出。

有一个例子(来自这个页面):

// redux/actions.js
import { ADD_TODO } from "./actionTypes";

let nextTodoId = 0;
export const addTodo = content => ({
  type: ADD_TODO,
  payload: {
    id: ++nextTodoId,
    content
  }
});

// ... other actions

这是否意味着我必须忘记迄今为止学到的一切?

标签: reactjsreduxreact-redux

解决方案


在我看来,这是一个动作创建者,而不是减速器。动作创作者不必是纯粹的。

动作创建者也可以是异步的并且有副作用。

https://redux.js.org/basics/actions#action-creators


推荐阅读