gpt4 book ai didi

typescript - 如何使用 RootState 修复切片的循环依赖关系?

转载 作者:行者123 更新时间:2023-12-03 23:03:47 25 4
gpt4 key购买 nike

我最近开始使用 redux-toolkit并开始使用 createSlice 编写我的 reducer 按照他们的文档。
一个 reducer ,姑且称之为reducerA , 进口 customAsyncFunction为了处理它的回调,这个函数是通过 createAsyncThunk 创建的依次读取 RootState当它调用 thunkApi.getState() ,现在的问题是当RootReducer是进口的,reducerA将被导入生成循环引用。
基本上:RootReducer -> reducerA -> actions -> RootReducer -> ...
下面我尝试简化问题。

// actions.ts file
import { RootState } from "./RootReducer";

export const customAsyncAction = createAsyncAction("myaction", async (_, thunkApi) =>
const state = thinkApi.getState() as RootState;
...
);


// reducerA.ts file
import { customAsyncAction } from "./actions";

const slice = createSlice({
...
extraReducers: {
[customAsyncAction.fulfilled.toString()]: ... // handles fulfilled action
}
});

export default slice.reducer;



// RootReducer.ts file
import reducerA from "./reducerA"
import reducerB from "./reducerB"

const reducers = combineReducers({
reducerA,
reducerB
});

export type RootState = ReturnType<typeof reducers>; // complains about circular reference
this section of the documentation它提到了这种情况发生的可能性,并且存在将代码拆分到文件中的模糊建议。但是,从我的所有尝试中,我似乎无法找到解决此问题的方法。

最佳答案

仅限类型的循环引用很好。 TS 编译器将在编译时解决这些问题。特别是,切片文件导出其reducer,将reducer导入store setup,定义RootState是很正常的。基于该切片键入,然后重新导入 RootState键入回切片文件。
当涉及运行时行为时,循环导入只是一个潜在的问题,例如两个切片取决于彼此的操作。
不幸的是,据我所知,用于捕获循环依赖项的 ESLint 规则无法判断导入的内容只是一种类型。

关于typescript - 如何使用 RootState 修复切片的循环依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63923025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com