在我的 CRA 项目中,我有一个configureStore.ts
导出我的 redux 存储的文件:
// ...
export const store = createStore(
rootReducer,
initialState,
compose(applyMiddleware(...middleware), ...enhancers)
);
我手动订阅了商店staticIntl.ts
,在整个项目中被导入了数百次
import { store } from "../configureStore"
class IntlManager {
constructor() {
store.subscribe(this.onStoreChange);
}
// ...
}
const manager = new IntlManager()
但是当我运行项目时,store.subscribe
失败是由于
TypeError:无法读取未定义的属性“订阅”
我几乎可以肯定这是由于进口订单/可用性
我设法通过无延迟 setTimeout 将订阅回调推送到任务队列的末尾来“解决”这个问题(我知道它实际上舍入到了几个 MS,但我认为我真的不需要介意这一点):
constructor() {
setTimeout(() => store.subscribe(this.onStoreChange));
}
这安全吗?我主要关心三件事:
- 即使包裹在 setTimeout 中,订阅是否仍可能由于相同的原因而失败?例如,如果以某种方式处理我的模块需要很长时间
- 是否有可能在订阅之前发生第一次商店更新(因此在订阅回调调用中丢失)?
- 由于我的 React 应用程序从服务器获取数据并分派响应,是否会发生这种更新?
我的修复/破解还有其他潜在的陷阱吗?
另外,还有什么其他方法可以解决我的问题?我会特别感谢一个指向正确指南的链接。