【问题标题】:How can I tell Redux not to update React state yet?我如何告诉 Redux 不要更新 React 状态?
【发布时间】:2018-02-28 22:18:16
【问题描述】:

我目前正在处理一个非常大的数据表。用户可以执行的一些操作非常复杂——足够复杂,以至于我最终可能会dispatch对 Redux 执行一百个实际操作,其中许多操作将依赖于由先前操作更新的状态,并导致一百个状态更改。 . 这将导致页面似乎被锁定,因为一个非常大的表格中的许多东西被渲染了一百次,即使这些更新都不会对用户单独有意义(或积极混淆)

有没有办法延迟 Redux/React 看到这些变化 - 说“好吧,不要打扰 React 关于这些东西,不要重新计算任何道具,不要做任何事情 但是把这些东西扔进减速器,直到它完成,我告诉你它完成了,然后恢复正常行为”?

我知道我可以设置一些 React 状态属性,然后在我的许多组件中的每个组件中都有一个 shouldUpdateComponent,但我希望有一个解决方案,减少分散在数十个文件中的重复代码,甚至可能提高效率避免每次更新多次调用相同的函数。

有什么建议吗?

【问题讨论】:

  • 类似问题,但没有重要的“调度的操作取决于当前状态”位 - 在这种情况下,所选答案的响应均无用。不过,markerikson 发布了很多链接,也许其中一个可以提供帮助,所以感谢您的链接!

标签: javascript reactjs redux react-redux


【解决方案1】:

Dan Abramov 自己在 twitter 上写了一个示例,说明如何使用批处理操作和高阶 reducer 来做到这一点。

https://twitter.com/dan_abramov/status/656074974533459968?lang=en

这个想法的要点是将要批处理的动作包装在另一个动作中,并定义一个更高阶的reducer(一个返回另一个reducer的reducer,例如redux-undo),它将在处理时应用所有这些动作批量操作更新。

【讨论】:

  • 当发送的操作依赖于先前操作的结果时,这是否有效?也许这包含在“定义更高阶的减速器”部分中……这是否意味着您实际上是在返回一个……我不知道,状态的“镜像”并从中更新/读取而不是真实的商店?
  • 另外,他的推文中的链接实际上不起作用,所以我实际上看不到这个例子。你知道它实际上在哪里吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 2021-10-29
相关资源
最近更新 更多