Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 条件Redux reducer用法_Javascript_Reactjs_Ecmascript 6_Redux - Fatal编程技术网

Javascript 条件Redux reducer用法

Javascript 条件Redux reducer用法,javascript,reactjs,ecmascript-6,redux,Javascript,Reactjs,Ecmascript 6,Redux,我正在开发一个应用程序,希望在其中管理不同的业务子域 域类型在我的存储中 我已经创建了特定的组件,根据我的存储状态加载。例如: let component; switch (this.props.somestate.somevar) { case 'business1': default: component = require('path/to/business1/B1Component').default; break; case 'business

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

域类型在我的存储中

我已经创建了特定的组件,根据我的存储状态加载。例如:

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} />
let组件;
开关(this.props.somestate.somevar)
{
案例“业务1”:
违约:
component=require('path/to/business1/B1Component')。默认值;
打破
案例“业务2”:
component=require('path/to/business2/B2Component')。默认值;
打破
}
返回
但我也希望为这些子域使用特定的缩减器,仅在需要时由store.replaceReducer()加载

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

像上面的例子一样,我希望保留所有常见的减缩器,但根据API返回的内容添加一些特定于业务的减缩器

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

我是否应该编写一个中间件来截取这些信息并在我的商店上调用replaceReducer? 我是否应该直接从高阶组件执行此操作? 我想做的是坏习惯/反模式吗


我不确定这里的最佳模式/实践是什么

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

非常感谢,丹。我会试试看它是否工作正常。