假设以下结构
stores/
RouterStore.js
UserStore.js
index.js
each of ...Store.js
files 是一个 mobx 存储类,包含@observable
and @action
. index.js
只是导出所有商店,所以
import router from "./RouterStore";
import user from "./UserStore";
export default {
user,
router
};
访问一家商店内另一家商店的正确方法是什么?即在我的 UserStore 中,当用户身份验证更改时,我需要从 RouterStore 分派操作。
I tired import store from "./index"
inside UserStore
然后使用store.router.transitionTo("/dashboard")
(transitionTo
) 是 RouterStore 类中的一个操作。
但这似乎无法正常工作。
您提出的解决方案不起作用,因为您对包含观察值的商店实例感兴趣,而不是没有状态的 Store 类。
鉴于存储依赖项之间没有任何循环,您可以将一个存储作为构造函数参数传递给另一个存储。
就像是:
routerStore = new RouterStore();
userStore = new UserStore(routerStore);
stores = {user: userStore, router: routerStore};
在这里,您将 routerStore 实例传递给 userStore,这意味着它将可用。例如:
class UserStore {
routerStore;
constructor(router) {
this.routerStore = router
};
handleLoggedIn = () => {
this.routerStore.transitionTo("/dashboard")
// Here the router has an observable/actions/... set up when it's initialized. So we just call the action and it all works.
}
}
另一种方法可能是在调用 userStore 中的函数时将其他存储(例如 routerStore)作为参数传递。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)