我有一个这样的屏幕
const ScreenA = observer(() => {
const { userStore } = useRootStore();
useEffect(() => {
setInterval(() => {
userStore.ping();
}, 3000);
}, []);
console.log(userStore.pingResult);
retunr <></>
});
和存储
class UserStore {
pingResult = null;
ping = async () => {
console.log('ping');
const pingResult = await this.userService.ping();
runInAction(() => {
this.pingResult = pingResult;
});
};
}
问题是console.log(userStore.pingResult);
只工作一次-我猜,观察者只是看不到商店已更新。尝试JSON.parse(JSON.stringify(pingResult))以确保pingResult是全新的,但它不起作用。同时,console.log('ping')
按预期工作-每3秒。
我认为你必须让你的用户商店可观察。否则它只是一个普通的JS实例,对于mobx
来说是不可观察的。class UserStore {
constructor() {
makeAutoObservable(this);
}
// ...
}