簡體   English   中英

Mobx不會觀察可觀察數組中的類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM