代码之家  ›  专栏  ›  技术社区  ›  kurtgn

redux和immutable.js:将非序列化对象置于状态

  •  2
  • kurtgn  · 技术社区  · 6 年前

    官方redux页面强烈建议 only serializable objects 放入状态树:

    强烈建议您只放置普通的可序列化对象, 数组和原语进入存储区。从技术上讲 将不可序列化的项插入存储区,但这样做可能会中断 保存和再水化存储内容的能力,以及 干扰时间旅行调试。

    但是,在同一页的几个部分后面,有一个 section about using immutable.js :

    以不变为中心的库(如Immutable.JS)被设计为 克服JavaScript中固有的不变性问题, 提供不变性的所有好处 应用程序需要。

    这两种观点不矛盾吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Josep    6 年前

    不,他们不是。

    ImmutableJs实例是可序列化的。例如,使用 transit-immutable .

    仅仅因为ImmutableJs实例不是简单的javascript对象,这并不意味着它们是不可序列化的。另外,仅仅使用普通的javascript对象并不能完全保证存储的状态是可序列化的。例如,想象一个减速机这样做:

    const sillyReducer = (state, action) => {
      if (action.type !== 'DO_SOMETHING_SILLY') return state;
      const a = {};
      const b = {next: a};
      a.next = b;
      return a;
    }
    

    循环依赖项很难序列化。

        2
  •  0
  •   Dima Vishnyakov    6 年前

    时间旅行调试(又名Redux devtools) supports 不可变.js。它是可序列化的。