条件Redux减速机用法

时间:2016-02-23 16:31:36

标签: javascript reactjs ecmascript-6 redux

我正在开发一个我希望管理不同业务子域的应用程序。

域名类型在我的商店中。

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

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} />

但我还想为这些子域使用特定的reducer,仅在需要时由store.replaceReducer()加载。

我找到了一种基于路线的方法,例如:How to dynamically load reducers for code splitting in a Redux application?

与上面的示例一样,我希望保留所有常见的reducer,但是根据API返回的内容添加一些特定于业务的Reducer。

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

我应该编写一个中间件来拦截这些信息并在我的商店中调用replaceReducer吗? 我应该直接从高阶组件中做到吗? 我想做一个糟糕的练习/反模式?

我不确定这里最好的模式/做法是什么......

1 个答案:

答案 0 :(得分:2)

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