我试图更新类Test的_users hashmap,以及两个" strange"事情正在发生(我是一个MobX新手):
如果我将this._users = {}
置于addUser()
内,则事情按预期工作:MobX告诉我将addUser定义为动作,并且多次触发自动运行。但这仅用于测试,我不需要每次都重置hashmap
我应该如何更新_users让MobX触发事件?
代码如下
import { useStrict, configure, autorun } from 'mobx';
import { observable, action, computed } from 'mobx';
configure({ enforceActions: true });
class Test {
@observable _users = {};
userCount = 0;
addUser() {
this._users[this.userCount++] = 0;
}
}
var t = new Test();
autorun(function test () {
console.log("users: ", t._users);
});
t.addUser();
t.addUser();
t.addUser();
console.log("users: ", (Object.keys(t._users)).length); // print users: 3
答案 0 :(得分:0)
要自动运行(以及一般观察者),您必须访问被观察对象的属性。只有那个阅读(解除引用)才会告诉mobx要观察什么。你没有在自动运行功能中执行此操作,因此autorun在再次运行autorun时无法获取。
因此,在您的情况下,您必须阅读至少一个观察对象的道具。所以我建议你做以下事情:
import { useStrict, configure, autorun } from 'mobx';
import { observable, action, computed } from 'mobx';
configure({ enforceActions: true });
class Test {
@observable _userStore = { users: {} };
userCount = 0;
addUser() {
this._userStore.users[this.userCount++] = 0;
}
}
var t = new Test();
autorun(function test () {
console.log("users: ", t._userStore.users); // Here we are reading a prop of userStore
});
t.addUser();
t.addUser();
t.addUser();
console.log("users: ", (Object.keys(t._userStore.users)).length); // print users: 3
<强>参考文献:强>