目前,我有一个mobx结构:
现在我的init商店js看起来像:
const initStores = (apolloClient) => {
const appStore = new AppStore(apolloClient),
// Data Stores
uploadStore = new UploadStore(appStore),
collectionGroupsStore = new CollectionGroupsStore(appStore),
collectionsStore = new CollectionsStore({appStore, uploadStore, collectionGroupsStore}),
imagesStore = new ImagesStore({appStore}),
// Pages
indexPageStore = new IndexPageStore({appStore, uploadStore, collectionsStore, collectionGroupsStore}),
collectionPageStore = new CollectionPageStore(appStore, uploadStore),
loginStore = new LoginStore(appStore),
publicUserStore = new PublicUserStore(appStore),
userSettingsStore = new UserSettingsStore(appStore);
collectionGroupsStore.injectStores({collectionsStore})
return {
appStore,
uploadStore,
collectionsStore,
collectionGroupsStore,
indexPageStore,
collectionPageStore,
loginStore,
publicUserStore,
userSettingsStore,
}
}
const stores = initStores(apolloClient)
export default stores;
问题是域存储(collectionGroupsStore,collectionsStore,imagesStore)需要相互链接并在它们之间共享数据。似乎我有更多的域名存储,我会写更多的样板文件。我错过了什么吗?有没有更好的方法来组织商店并让他们互相交谈?
编辑:我认为我对初始配置进行了优化:
const initStores = (apolloClient) => {
// Data Stores
const dataStores = {
appStore: new AppStore(apolloClient),
uploadStore: new UploadStore(),
collectionGroupsStore: new CollectionGroupsStore(),
collectionsStore: new CollectionsStore(),
}
for (let prop in dataStores) {
if (dataStores[prop].injectStores) dataStores[prop].injectStores({...dataStores})
}
// Pages
const pageStores = {
indexPageStore: new IndexPageStore({...dataStores}),
collectionPageStore: new CollectionPageStore({...dataStores}),
loginStore: new LoginStore({...dataStores}),
publicUserStore: new PublicUserStore({...dataStores}),
userSettingsStore: new UserSettingsStore({...dataStores}),
}
return {
...dataStores,
...pageStores
}
}