我有两个模型:MessageModel
包含消息文本(可观察),MessageListModel
包含这些MessageModel
对象的列表(也可观察)。
我在每次更改邮件列表时都注册了一个mobx.autorun()
。
但是,autorun
在列表中添加/删除消息时触发,但在更改现有消息的文本时不触发。
示例:
我的MessageListModel
:
import { observable, decorate } from "mobx";
import MessageModel from "./MessageModel";
import * as mobx from "mobx";
class MessageListModel {
messages = [];
constructor() {
mobx.autorun(() => {
console.log('Autorun triggered!');
console.log(this.messages.length);
});
}
addMessage(text) {
this.messages.push(new MessageModel({ messageList: this, text: text }));
}
getMessageText(index) {
return this.messages[index].text;
}
setMessageText(index, messageText) {
this.messages[index].text = messageText;
}
}
decorate(MessageListModel, {
messages: observable, // don't wanna use decorator syntax
})
export default MessageListModel;
我的MessageModel
:
import { observable, computed, action, decorate } from "mobx";
import {observer} from "mobx-react";
class MessageModel {
constructor({messageList, text}) {
this.text = text;
this.messageList = messageList;
}
text = undefined;
}
decorate(MessageModel, {
text: observable,
})
export default MessageModel;
尝试运行此:
const messageList = new MessageListModel();
messageList.addMessage('msg1'); // triggers autorun
messageList.addMessage('msg2'); // triggers autorun
messageList.setMessageText(1, 'other text'); // does not trigger autorun
messageList.setMessageText(0, 'other text'); // does not trigger autorun either
我如何使其观察到消息的变化,而不是消息量的变化?