反应 - 立即将 DataSet1 和 DataSet2 存储到 Redux Store,其中 DataSet2 派生自 DataSet1

react - instantly storing DataSet1 and DataSet2 to Redux Store where DataSet2 is derived from DataSet1

(很抱歉,如果有人问类似的问题,但我在多个动作调度中找到了一些,并重新使用了 redux-batched-subscribe。这不是我想要的)

我需要制作一个与下图类似的仪表板。

它使用三个来源 - DataSet1(用户添加的数量)、DataSet2 和 DataSet3。

DataSet2 和 DataSet3 使用 utils/function.

从 DataSet1 派生(即某些计算是在 DataSet1 上完成的)

任何时候 DataSet1 发生变化(用户添加新数量、编辑或删除它)DataSet2 和 DataSet3 都应该重新计算并且仪表板应该立即完全更新。

我正在尝试设计它以避免重复重新计算和循环重新渲染。

我正在考虑使用 Redux-Thunk。

执行类似任务的 React 方法是什么?

谢谢!

编辑: 删除了不需要的细节,将重新选择添加到标签

欢迎使用 React 和 Redux - 当你掌握它时,它很棒。

我假设您正在使用 react-redux 包来处理 React 和 Redux 之间的绑定。这个包提供了一个名为 Provider 的 class ,你可以将你的应用程序包装在其中。Provider 做了几件事,但其中一件重要的事情是它订阅商店并在商店更改时触发重新渲染.

如@zzzzBov 所述,派生值不应添加到存储中。为此,我们使用 selectors。在您的情况下,这意味着 DataSet1 存在于商店中,而 DataSet2 和 DataSet3 将由 selector 计算。为了清楚起见,下面是用户更改 DataSet1 时的事件流:

  1. 用户更改了 DataSet1,您在 mapDispatchToProps() 中定义的函数在存储上调度了一个操作。
  2. 减速器运行,生成一个新的状态对象。
  3. 存储的任何订阅者都会被调用并传递新的状态对象(在本例中为 Provider)。
  4. Provider 触发组件的高效重新渲染(我所说的高效是指它检查 select 在 mapStateToProps() 中的状态片段是否已更改)。
  5. 您的组件负责从存储中呈现 DataSet2 和 DataSet3 select DataSet1,并动态派生 DataSet2 和 DataSet3,然后将它们传递给各自的组件.

如果您不希望 DataSet2 和 DataSet3 组件在商店的每次更改时重新呈现,请使用库 reselect。 Reselect 缓存派生值,这反过来又避免了虚假的重新渲染。当状态改变时,Reselect 检查它的输入值是否改变了,如果改变了,它重新计算输出。然后您的组件 select 来自 Reselect 而不是 select 直接来自状态对象。

希望对您有所帮助。祝你好运!