2017-10-18 33 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);