React Redux:如何在减速器之间共享数据?

Wil*_*iam 2 javascript reactjs react-redux

我有一个基本的待办事项清单。待办事项列表的待办事项输入字段有一个 onChange 事件,该事件会触发一个动作并将 event.target.value 发送到减速器并将用户键入的每个字符存储到商店对象的属性中。

当用户提交表单时,我想获取以前通过 onChange 事件存储的数据,然后我想将它放在 store 对象的新属性上。

如何获取先前从商店输入的数据并将其拉入不同的减速器?

在我见过的所有示例中,reducer 都以“初始状态”开始。我不想要那个,我想要用户输入的先前状态。

下面是代码的 CodeSandbox 版本(出于某种原因,右侧的橙色-米色选项卡需要向左切换为蓝色才能呈现表单。如果您不这样做,它将无法工作)。

https://codesandbox.io/s/pwqlmp357j

Shi*_*vam 7

问问自己您是否正确构建了减速器。如果 a 和 b 不相互独立,为什么它们是分开的减速器?

好吧,如果我们谈论正确构造减速器,cachedInput并且todoList应该住在单个减速器中。无需创建另一个减速器。另外我猜你需要一次获取输入值(当用户点击提交时)并将其发送到存储。

如果你仍然想创建单独的减速器,那么你可以按照下面给出的方法:

如何访问或共享已存储在减速器中的数据的回答

不要使用 combineReducers。

例子

替换此代码

export const a = combineReducers({
  cachInput,
  newTodo
});
Run Code Online (Sandbox Code Playgroud)

export default (state = {}, action) => {
  return {
    cachInput: cachInput(state.app, action, state),
    newTodo: newTodo(state.posts, action, state),
  };
};
Run Code Online (Sandbox Code Playgroud)

减速器会像

const reducer = (state = initialState, action, root) => {....}
Run Code Online (Sandbox Code Playgroud)

你可以从 root