Reducer 状态没有被新对象更新 [redux, redux-toolkit, normalize]

Posted

技术标签:

【中文标题】Reducer 状态没有被新对象更新 [redux, redux-toolkit, normalize]【英文标题】:Reducer state is not being updated with the new object [redux, redux-toolkit, normalize] 【发布时间】:2020-05-23 19:37:38 【问题描述】:

有一个 DeliveryManifestView 组件。它运行一个分派 thunk 的效果。

thunk 从 api 获取数据,然后用normalizr 进行标准化。

normalizedData 被传递给由redux-toolkit 创建的操作。

并且reducer返回实体的新对象。

它在第一次运行时完美运行。但是,如果我去另一个视图然后回来

效果重新运行,thunk 被调度,

数据来自api,

数据再次传给reducer,reducer返回新数据,

但状态没有发生变化,我仍然得到旧状态。

这是来自 redux devtools 的操作差异

这是第一次渲染

回到另一个视图并返回后

数据缩减器中没有差异,即使新数据来自 api。

【问题讨论】:

我刚刚遇到了这个问题,完全被难住了。我所有的其他减速器都按预期工作,并且我已经记录了每一步,一切都应该没问题。似乎它必须是一个错误。你找到解决办法了吗? 【参考方案1】:

啊 - 我也遇到了同样的问题,但结果证明我只是很傻......

就我而言,它是调试器。不知道我是怎么做到的,但它专注于状态的一个特定部分,所以我的变化正在发生,但没有显示在差异中。 (我正在使用 React Native 调试器)

正如我所说的 - 无法弄清楚我是如何打开它的,但我通过点击 Diff 显示在此处的其他减速器的名称将其删除:

【讨论】:

【参考方案2】:

问题在于,当 normalizr 获得一个空数组时,它返回一个 undefined,因此 reducer 也返回了 undefined,导致没有任何变化。这是我想出的解决方案

deliveryPackages一个默认值。

【讨论】:

以上是关于Reducer 状态没有被新对象更新 [redux, redux-toolkit, normalize]的主要内容,如果未能解决你的问题,请参考以下文章

redux reducer 不更新 store 中的状态

React / Redux:在reducer中更新对象的正确方法

Redux:重用reducer来更新多个状态属性

更新:没有调用 Redux reducer 来更改 CSS 类

Redux (with React) Reducer switch 语句不更新状态

Redux Action 没有被传递给 reducer