下面的代码:

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/

10-13 01:46