你可以在已经部分包含Immutable对象的对象上使用Immutable fromJS()吗?

时间:2017-08-20 15:19:06

标签: javascript immutable.js

我有一个简单的javascript对象,我想使用“fromJS()”转换为不可变的Map。但是,我想要一个字段Supplier.selectedIndicesSet()。默认情况下,fromJS()将其转换为List()。我可以在我的普通Javascript对象中执行以下操作,启动Set()对象吗?

这是好习惯吗?请指教。谢谢!

export const initialState = fromJS({
  Inventory: {
    inventory: [],
    selectedInventory: [],
  },
  Supplier: {
    suppliers: [],
    selectedIndices: Set(),
  },
});

1 个答案:

答案 0 :(得分:0)

要回答标题,在混合对象上使用fromJS是安全的。 docs sort of mention that

  

fromJS的转换是保守的。它只会将传递Array.isArray的数组转换为Lists,并且只将原始对象(无自定义原型)转换为Map。

不可变的收藏品不符合这些标准。

要回答问题的正文,fromJS提供了reviver

  

如果可选地提供了reviver,它将被调用每个集合作为Seq(从最嵌套的集合开始并继续到顶级集合本身),以及引用每个集合和父JS的键。这样提供的对象。对于顶级对象,密钥将是""。这个reviver应该返回一个新的Immutable Collection,允许从深层JS对象进行自定义转换。最后,提供了一个路径,它是从起始值到该值的键序列。

reviver函数应该能够检测您的字段(使用值类型或Immutable提供的路径)并创建Set