有条件的 Redux reducer 使用

Conditional Redux reducer usage

我正在开发一个应用程序,我想在其中管理不同的业务子域。

域类型在我的商店中。

我创建了特定的组件,根据我的商店状态加载。例如:

let component;
 switch (this.props.somestate.somevar)
 {
   case 'business1':
   default:
     component = require('path/to/business1/B1Component').default;
     break;
   case 'business2' :
     component = require('path/to/business2/B2Component').default;
     break;
 }
 return <component {...this.props} />

但我也想为那些子域使用特定的减速器,仅在需要时由 store.replaceReducer() 加载。

我找到了一种基于路线的方法,例如:

像上面的例子,我想保留所有通用的reducer,但是根据API returns添加一些业务特定的reducer。

但在我的例子中,路由没有说明涉及哪个子域,我通过 API 调用获得此信息并将其存储在 Redux 存储中。

我是否应该编写一个中间件来拦截此信息并在我的商店中调用 replaceReducer? 我应该直接从高阶组件做吗? 我想做的是不好的做法/反模式吗?

我不确定这里最好的是什么 pattern/practice ...

由于您所做的有点不寻常,因此这里没有最佳实践或反模式。我会说 也应该对你工作得很好,你在哪里调用 replaceAsyncReducer(或者你决定如何调用它)并不重要。路由处理程序只是一个可能的示例,但是从相关组件的 componentWillMount 或您进行 API 调用的任何地方,甚至从专用中间件执行此操作都很好,只要它很容易追查为什么会发生这种情况。由于它有点不寻常,我建议尽可能少地使用间接寻址,所以从最简单的解决方案开始(在您的情况下,听起来 API 调用是放置它的最佳位置)。