【问题标题】:Share states between two reducers (React +Redux)在两个 reducer 之间共享状态(React +Redux)
【发布时间】:2023-10-20 05:01:06
【问题描述】:

我有这两个减速器

const getPosts = (initialState = {posts: []}, action) => {...}

const createPost = (initialState = {post: null}, action) => {...}

其中getPostsreducer 将关联操作创建者执行的获取的帖子放入状态变量posts,而createPost 将创建的帖子放入状态变量post。与createPost 关联的动作创建者将帖子存储到后端的数据库中,并且在将帖子存储在数据库中之后,我想从getPosts 更新前端页面上的帖子而不获取所有帖子再次从数据库中,因为我已经拥有该州的所有帖子,但新帖子。所以,我想要做的是将创建的帖子推送到posts 状态变量中,但两种状态都在不同的减速器中。如何将post 状态变量的值推送到posts 状态变量中以实现前端更新,而无需在每次创建帖子后再次获取所有帖子?

【问题讨论】:

  • 您应该在动作中获取状态变量,并将其在有效负载中发送到另一个reducer。使用像 redux-thunk 或 react-redux hooks 这样的中间件

标签: reactjs redux


【解决方案1】:

当您调度创建新帖子的操作时,您还可以调度一个将其添加到getPosts reducer 的操作。

或者,当 POST 成功创建新的 post in the db, you can then dispatch the action that adds it to the getPosts` 减速器时。

【讨论】:

  • 我想这是一种方法,通过在动作创建器中使用getState() 来获取posts 状态变量并将新帖子推送到其中,然后将修改后的@987654327 @再次进入getPosts减速器,虽然我在想也许*减速器是一个更好的解决方案,但我不知道如何实现它。
  • 好吧,我想,既然你提到了它,如果你只有 postspost 状态你正在跟踪,为什么不把它们放在同一个减速器中呢?
  • 这些只是样本缩减器。我有很多用于帖子的减速器,如果放在一起减速器的状态会很大而且很复杂。
  • 在 Redux 中,您可以使用 combineReducers: redux.js.org/recipes/structuring-reducers/using-combinereducers 制作* reducer