具有代码拆分和延迟加载还原器的同构Redux

具有代码拆分和延迟加载还原器的同构Redux,redux,Redux,我正在使用react router和redux构建一个同构应用程序,其中包含代码拆分。我已经尽了最大的努力,但我需要一些帮助来解决剩下的问题。我有一个大型应用程序,需要对前端进行代码拆分。我有一个reducer注册表,它允许我注册新的reducer(延迟加载),或替换存储中的现有reducer。这非常有效,但是因为我的应用程序的部分是延迟加载的,当我在客户端调用combinereducer()时,我的延迟加载还原程序不存在,而它们在服务器上完全解析。这会导致意外的密钥错误,并强制我的存储忽略初始

我正在使用react router和redux构建一个同构应用程序,其中包含代码拆分。我已经尽了最大的努力,但我需要一些帮助来解决剩下的问题。我有一个大型应用程序,需要对前端进行代码拆分。我有一个reducer注册表,它允许我注册新的reducer(延迟加载),或替换存储中的现有reducer。这非常有效,但是因为我的应用程序的部分是延迟加载的,当我在客户端调用combinereducer()时,我的延迟加载还原程序不存在,而它们在服务器上完全解析。这会导致意外的密钥错误,并强制我的存储忽略初始状态下的有问题的密钥

初始状态(来自服务器)

客户端重排预期初始状态

这是基于可用的减速器

{ "user": {...} }
负载减速器

  • 用户减速器
延迟加载减速器

  • 减壳剂
当我调用下面的

const finalCreateStore = compose(
  applyMiddleware(promiseMiddleware)
)(createStore);
const rootReducer = combineReducers({...reducers})
const store = finalCreateStore(rootReducer, initialState);
在传递给createStore的initialState参数中发现意外的键“case”。希望找到一个已知的reducer键:“user”。意外的键将被忽略


服务器上的一切都很好,但是在客户端初始化应用程序时,在加载之前暂时缺少一个reducer会导致此错误。有人知道如何绕过这个错误,或者告诉redux不要验证初始状态的形状吗?我需要为我的延迟加载减速器提供“cases”。

似乎您应该选择不使用内置的
组合减速器,因为您知道警告不适用于您的使用。从Redux指南:

这两种编写组合减速器的方法完全相同:

const reducer = combineReducers({
  a: doSomethingWithA,
  b: processB,
  c: c
})

function reducer(state, action) {
  return {
    a: doSomethingWithA(state.a, action),
    b: processB(state.b, action),
    c: c(state.c, action)
  }
}
所以你不妨选择第二种选择

const reducer = combineReducers({
  a: doSomethingWithA,
  b: processB,
  c: c
})

function reducer(state, action) {
  return {
    a: doSomethingWithA(state.a, action),
    b: processB(state.b, action),
    c: c(state.c, action)
  }
}