反应 Redux 反模式以计算结果并将结果存储在商店中?

React Redux anti pattern to calculate and store results in store?

我至少有两种解决问题的方法。

  1. 在每次更新(地图、过滤器、查找)时在视图内重新计算

  2. 在我的 redux 状态中保留一个 "CurrentState" 对象。

我选择创建一个 CurrentState 对象来存储我的计算结果(它在 reducer 函数中计算结果)。

方法二节省了处理器的计算量,但感觉很脏。

在状态中有一个 CurrentState 对象(从 reducer 更新)是否被认为是反模式

提前致谢!

从你的问题中不完全清楚 - 但我假设你在谈论情况,你可以从商店中的其他数据计算 "result" 并询问将其(冗余)存储在商店中是否是好的模式.

好吧,通常我不会推荐它,因为在存储中保留冗余数据会导致不一致的数据错误 - 如果您忘记保持数据同步(例如,当您或从事该项目的其他人会更改一个数据时忘记更改订单地点)。

这方面的标准模式通常是使用选择器和记忆(参见 https://github.com/reactjs/reselect)。这个想法是只在您的商店中保留规范化数据,但在您的视图中使用选择器。选择器负责 "cache"(记住)大量计算。选择器的另一个优点是它为您的应用程序提供了间接级别,并且您可以轻松地改变您的状态(随着项目的增长)而不会影响您的整个应用程序。另一方面,对于小型和一次性项目,选择器可以只是 "another" 样板 - 但通常我建议使用它们。

这是一个很难的反模式。

如果你正在阅读这篇文章,你可能还没有完全理解 redux,我想推荐一下

https://github.com/leoasis/redux-immutable-state-invariant