2017-10-18 3 views
2

mobx計算式で値の変化を聞こうとしましたが、観測値に新しい値をプッシュしても変化は見られません。Mobxが計算した値の変化を聞きます。

class List { 
    @observable values = []; 

    constructor() { 
    computed(() => this.values).observe(changes => { 
     console.log(changes); 
    }) 
    } 


    add(item) { 
    this.values.push(Math.random()); 
    } 

} 

const list = new List(); 
list.add(); 

なぜ機能しないのですか?

答えて

1

computedは唯一それが実際にアクセスするデータを追跡すること。あなたの計算でアクセスされる唯一のデータは、配列へのポインタであるchangesです。その配列に新しい値をプッシュしても、ポインタは変更されません。

覚えておいてください:計算された値、反応&の副作用が生成されます。

計算では新しい値が生成されないため、observerは決してトリガーしません。

+0

新しい値===新しいリファレンス? – JsFan

+0

はい(この動作はカスタマイズすることもできます) – mweststrate

0

computedは、他の観測値から新しい値を派生させたい場合に使用します。あなたは代わりにobserveを使用することもできます。

例(JSBin

class List { 
    @observable values = []; 

    constructor() { 
    observe(this.values, (change) => { 
     if (change.added) { 
     console.log(`${change.added} got added to values`); 
     } 
    }); 
    } 

    add(item) { 
    this.values.push(Math.random()); 
    } 
} 

const list = new List(); 

setInterval(() => { 
    list.add(); 
}, 1000); 
関連する問題