[英]Mobx doesn't observe classes in observable array
如果我將一個類實例推入MobX中的一個可觀察數組,那么就不會觀察到它。 但是,如果我將一個文字對象推入一個可觀察的數組,那么它將被觀察到。
“數組的所有(未來)值也將是可觀察的”
所以我試圖理解為什么會這樣。
例如,可以在節點中運行以下代碼:
let mobx = require('mobx');
class TodoStore {
constructor() {
this.todos = mobx.observable.array([]);
this.todos.push({title:'todo 1'});
this.todos.push(new Todo('todo 2'));
}
}
class Todo {
constructor(title) {
this.title = title;
}
}
let store = new TodoStore();
console.log('***initial state***');
mobx.autorun(() => {
if(store.todos.length > 0) {
console.log('first todo:', store.todos[0].title);
console.log('second todo:', store.todos[1].title);
}
});
console.log('***Updating todo 1***');
store.todos[0].title = 'todo 1 updated';
console.log('***Updating todo 2***');
//Why doesn't this trigger the autorun?
store.todos[1].title = 'todo 2 updated';
這會退出
***initial state***
first todo: todo 1
second todo: todo 2
***Updating todo 1***
first todo: todo 1 updated
second todo: todo 2
***Updating todo 2***
更新todo[1]
不會觸發自動運行。 有誰能解釋為什么? 我知道我可以手動使Todo類的title
屬性可觀察,但我想知道為什么我需要這樣做。
類永遠不會自動轉換,因為不會干擾類本身可能具有的任何內部假設。 請參閱可觀察對象的文檔:-D
如果value是具有原型,JavaScript原語或函數的對象,則將返回Boxed Observable。 MobX不會自動生成具有原型的對象; 因為這是其構造函數的責任。 在構造函數中使用extendObservable,或在其類定義中使用@observable。
換句話說,做類似的事情:
class Todo {
constructor(title) {
extendObservable(this, { title })
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.