我正在开发一个带有动态路由和异步缩减器的Redux项目。我只是在this question中使用Dan的方法注入Reducer。当我尝试为我的项目编写module.hot.accept
函数时,它变得非常棘手。这就是我的configureStore
函数
function configureStore(initialState = {}) {
let store = createStore(createReducer(), initialState, compose(
applyMiddleware(
thunk
)
))
store.asyncReducers = {}
if (process.env.NODE_ENV == 'development') {
if (module.hot) {
module.hot.accept('./routes/root', () =>
store.replaceReducer(createReducer(store.asyncReducers))
)
}
}
return store
}
在我更改其中一个子路由的reducer中的一些代码之后,我收到一条警告the modules which have changed (and their parents) do not know how to hot reload themselves.
我认为问题是injectAsyncRecuder
没有被调用,因为我更改了代码减速器。
如何让HMR适用于异步缩减器?
=====
更新
经过一番研究,请让我重新解释一下我的问题。假设有3个级别的路径,A,B和C. A需要B,B需要C. B需要reducer1。 C需要reducer2和reducer3。
.
├── Route A
│ ├── Route B
│ | ├── Reducer 1
│ | ├── Route C
│ | | ├── Reducer 2
│ | | ├── Reducer 3
当减速器3过时时,路径C和路径B也将过时。假设我将hot.module.accept
放在一个文件中,该文件要求路由A为hot.module.accept('./routesA', cb)
。我想知道如何检查过时的模块堆栈以找到过时的减速器。在这种情况下,我可以在所有减速器中放置update
个方法,这样他们就可以知道在过时时自己注入热量。