是否有人建议使用Immutable.js?
您可以创建自己的自定义转换。例如,将JS对象变成Immutable.OrderedMap
:
function fromJSOrdered(js) {
return typeof js !== 'object' || js === null ? js :
Array.isArray(js) ?
Immutable.Seq(js).map(fromJSOrdered).toList() :
Immutable.Seq(js).map(fromJSOrdered).toOrderedMap();
}
fromJS
具有一个称为reviver的第二个参数,可以完全用于此。
import Immutable from 'immutable';
const reviver = (key, value) =>
Immutable.Iterable.isKeyed(value) ? value.toOrderedMap() : value.toList();
const data = Immutable.fromJS(js, reviver);
@AlbertOlivé的响应在我的案例使用方面存在问题,因为递归和缺乏主要环境。我尝试了第二个上下文参数以映射,再次出现问题。最后,我意识到,我不在关心订单中的订单,仅在主要地图中传递给该功能,以维护服务器在HTML列表上提供的订单。因此,我将功能更改为没有递归的方式:
fromJSOrdered(js) {
if (typeof js !== 'object' || js === null || Array.isArray(js)) {
return fromJS(js);
}
return new OrderedMap(fromJS(js));
}
我实际上发布了一个包,该软件包可以将对象,数组或 Map
的对象转换为不变的List
'S和Record
'S:
https://github.com/jhukdev/immutable-parsejs
,如果您不想要Record
的s,可以查看源,易于更改。
Record
的虽然很好,因为您可以直接访问属性,这意味着如果您想离开immutablejs,这是一个更容易的前景