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

时间:2019-01-23 09:29:41

标签: reactjs redux

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

  

强烈建议您只放置简单的可序列化对象,   数组和图元放入您的商店。从技术上讲   将不可序列化的商品插入商店,但这样做可能会破坏   持久性和补给存储内容的能力   会干扰时间旅行调试。

但是,在同一页上的后面几节中,有一个section about using immutable.js

  

针对不可变的库(例如Immutable.JS)旨在   克服了JavaScript固有的不变性问题,   为您的性能提供不变性的所有好处   应用程序要求。

这两个想法不矛盾吗?

2 个答案:

答案 0 :(得分:1)

不,不是。

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;
}

循环依赖性很难序列化。

答案 1 :(得分:0)

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