【问题标题】:Why redux actions needs to be serializable?为什么 redux 操作需要可序列化?
【发布时间】:2022-12-22 08:00:52
【问题描述】:

https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants

虽然当然可以在任何地方手动创建操作对象,并手动编写每个类型值,但定义可重用常量会使代码维护更容易。

我不觉得简单根本。我 95% 的动作只用过一次或两次。有人觉得写作动作是有益的吗?

背景

我很生气写 redux 动作。即使是像 zustand 这样的库也需要采取行动。所以我决定写一个匿名函数来自动为我改变状态。因此警告。

reducer: (state, action) => {
    let newState = { ...state };
    if (action.type === "func") {
      newState = produce(state, action.func); // import produce from 'immer'  
    }

    return newState;
  },

【问题讨论】:

  • 学习 redux 工具包。您不需要编写操作和类型。只需编写切片器即可自动生成

标签: reactjs redux recoiljs zustand


【解决方案1】:

是的,这是可能的并且可以完成,但是动作的序列化启用了 Redux 的几个定义功能,例如时间旅行调试以及记录和重放动作。举个例子:时间旅行调试意味着 redux 知道特定时间的新线程何时被解析,并且可以由商店检查以重新渲染组件。以不可序列化的方式编写它,redux 不会保留这条轨道。

【讨论】:

  • Redux devtools time travel 不使用动作的序列化。我仍然能够进行时间旅行,因为该工具会跟踪状态差异。或者我的问题应该是,为什么在状态差异时命名的动作足以进行时间旅行?
  • 一旦动作可串行化,由 redux 完成的旅行会更有效率,并且它在其他方面也增加了更多的效率。然而,这增加了代码的空间复杂性,这在 Redux 工具包中被最小化并且可以忽略,因为当存在空间复杂性和计算能力的争论时,计算能力获胜。将动作写成可串行化可以减少时间旅行的计算量。
  • @jchnxu:我知道我们在 Github 上聊天,但相信我:Redux Devtools 绝对是需要序列化操作才能正常工作!这就是 DevTools 可以看到开始的操作的方式。它们必须从页面进程中的应用程序代码发送到外部浏览器进程中的扩展 UI,这需要跨进程序列化。
  • @markerikson 感谢您在整个网络上的耐心等待!事件驱动设计的想法开始在我心中萌芽。将更新状态与 pub-sub 模式解耦是 flux 的核心。如果不需要 pub-sub 我绝对可以放弃通量模式。
猜你喜欢
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
相关资源
最近更新 更多