Redux动态模块中的循环依赖

时间:2020-06-18 22:51:02

标签: redux redux-saga

我的项目结构是这样的 src>组件>模块 模块包含A,B,C等

每个模块包含-组件,action.js,reducer.js,module.js,saga.js 我们使用redux动态模块动态添加模块,并将模块依赖项添加到module.js

我有一些项目要求,以检查DOM中是否存在组件A,并且组件B进来了,我必须关闭组件A并显示ComponentB。

因此,我编写了一个模块D(活动模块),该模块具有活动组件的状态,并添加了D作为对A,B,C的依赖关系

A,B,C使用D的选择器获得活动模式,并对照活动模式检查传入模式。

如果A存在,然后B进入,则B从D的选择器获得活动模式,并向模块A调度动作。因此,B将A添加为依赖项。

如果我要为活动的B和传入的A写相同的代码,我最终会将B作为对A的依赖项添加。

这导致循环依赖,我们在代码中使用redux sagas。

欢迎任何建议

1 个答案:

答案 0 :(得分:0)

您可以使用应用程序上下文,模块可以通过它使用其他模块。 以下几行伪代码描述了我所做的事情:

// applcation-context.js
// Code with regesterModules(...modules)
// and methods/functions actions(moduleId), selectors(moduleId), ...

// bootstrap.js
import A from 'modules/A'
import B from 'modules/B'

appContext.regesterModules([A, B])

// Module A index.js
exports {moduleId: 'A', reducers, sagas, selectors, actions, routes, ... }

// Module B
import appContext from '../../application-context'

[...]
yield put(appContext.actions('A').actionCreator_1(...))
[...]