【发布时间】:2021-05-07 03:27:49
【问题描述】:
如何用 react 和 redux store 解决 nx 工作空间中的循环依赖问题?
例如,如果我有一个包含所有存储配置的库,则有一个文件 createRootReducer - 它结合了我的减速器:
import {
someSliceReducer,
SOME_SLICE_FEATURE_KEY,
} from '@app/feature';
export const createRootReducer = (history: History) =>
combineReducers({
router: connectRouter(history),
form: formReducer,
[SOME_SLICE_FEATURE_KEY]: someSliceReducer,
});
存储库中的应用程序状态为:
import { createRootReducer } from './createRootReducer';
export type ApplicationState = ReturnType<ReturnType<typeof createRootReducer>>;
问题来自于在 someSliceReducer 所在的库中导入应用程序状态:
import {ApplicationState} from '@app/store'
const entities= useSelector(
(state: ApplicationState) => state.dischargeFolder.loadingStatus
);
现在我们有了一个循环依赖,nx 警告我们:
Circular dependency between "feature" and "store" detected: feature -> store -> feature eslint@nrwl/nx/enforce-module-boundaries
如何防止这种情况发生?我需要在 root-reducer 中导入 reducer,但我还需要将 ApplicationState 导入到功能中。 我试图将 root-reducer 提取到自己的库中 - 但这并不能解决 nx 抱怨超过 3 个库的循环依赖的问题。
我还尝试使用“reducerRegistry”,它接受一个 reducer 并在内部注册它 - 不幸的是,使用这种方法我丢失了已注册 reducer 的类型信息,并且 ApplicationState 没有被正确推断。
【问题讨论】:
-
也许this ticket 需要更多人参与。我也遇到过类似问题。
标签: reactjs typescript redux nomachine-nx