如何让Hot Module Replacement在Async Reducers上运行?

时间:2016-03-05 18:58:44

标签: webpack redux

我正在开发一个带有动态路由和异步缩减器的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个方法,这样他们就可以知道在过时时自己注入热量。

0 个答案:

没有答案