下面的代码:
class A {constructor(v) {
this.v = v;
}}
const a = fromJS(new A({a: 42, someOtherSubTree: {}}));
const aMod = a.updateIn(['v', 'a'], x=>43);
……失败:
TypeError: a.updateIn is not a function
更简单的
set
也会失败,并且:TypeError: a.set is not a function
我已经找到了this related question,但是它被标记为'typescript',所以我不确定在那里建议的“包装”方法将如何转换为纯ES6。
最佳答案
在const a = fromJS(new A({a: 42, someOtherSubTree: {}}));
之后,typeof a
仍然是对象,并且像预期的那样成为Map
。它返回原始对象。
不可变代码的这一部分说明了原因。因为您的对象A既不是“普通对象”(请参见函数)也不是数组,所以它只是按原样返回。
function fromJSDefault(json) {
if (Array.isArray(json)) {
return IndexedSeq(json).map(fromJSDefault).toList();
}
if (isPlainObj(json)) {
return KeyedSeq(json).map(fromJSDefault).toMap();
}
return json;
}
// […]
function isPlainObj(value) {
return value && (value.constructor === Object || value.constructor === undefined);
}
关于javascript - 如何在ES6类中使用Immutable.js?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41091267/