2016-12-11 6 views
0

以下のコード:Immutable.jsをES6クラスで使用する方法は?

class A {constructor(v) { 
    this.v = v; 
}} 
const a = fromJS(new A({a: 42, someOtherSubTree: {}})); 
const aMod = a.updateIn(['v', 'a'], x=>43); 

&hellip。で失敗します。私は、「ラッピング」のアプローチが提案どのように確認していないので、しかし「typescriptです」でタグ付けされthis related questionを見つけた

TypeError: a.set is not a function 

TypeError: a.updateIn is not a function 

setシンプルなもで失敗します純粋なES6に変換されます。

+0

本当にクラスが必要ですか?厳密な構造とメソッドが必要な場合は、Immutable.js 'Record's https://facebook.github.io/immutable-js/docs/#/Record/Recordを使うことができます。ここでは良い例がありますhttps: //gist.github.com/prenaudin/f1cad2bda2f2334459f8b006449c91e4#file-1-models-task-js – Strajk

答えて

0

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); 
} 
関連する問題