条件 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()加载。

我找到了一种基于路由的方法,例如:如何在 Redux 应用程序中动态加载用于代码拆分的化简器?

就像上面的例子一样,我想保留所有常见的化简器,但根据 API 返回的内容添加一些特定于业务的化简器。

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

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

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

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

最新更新