reactjs - 无法在 createAsyncThunk 中将 getState 类型设置为 RootState

标签 reactjs typescript redux redux-thunk redux-toolkit

我无法设置 getState() 的返回类型至RootState .我正在使用 typescript 和 VSCode。我必须将类型设置为 any ,这会停止该对象上的 IntelliSense。下面是有问题的代码:

export const unsubscribeMeta = createAsyncThunk(
  'meta/unsubscribe',
  async (_, { getState }) => {
    const { meta } = getState() as any;
    const res = await client.post<apiUnsubscribeResponse>(
      `/meta/unsubscribe/${meta.subscriptionId}`
    );
    return res.data.data;
  }
);
如果我尝试使用 RootState而不是 any ,VSCode 在模块中标记了许多错误。我相信这是由于商店和这个切片的循环依赖。我正在使用 RootState在选择器模块的许多地方,没有问题。有没有解决的办法?

最佳答案

您实际上并不需要了解整个州的形状。您只需要知道您尝试访问的值是否存在。
如果可以访问整个state.meta类型:

const { meta } = getState() as { meta: MetaState };
如果不:
const { meta } = getState() as { meta: { subscriptionId: string } };
我推荐这种避免循环依赖的方法,因为根状态总是依赖于切片,所以切片不应该依赖于根。

关于reactjs - 无法在 createAsyncThunk 中将 getState 类型设置为 RootState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64793504/

相关文章:

javascript - 一个 <a> 标签是否可以有 2 个连续的 onclick 操作?

javascript - Angular 9 如何使用 TypeScript 将 HTML 文件导入为字符串?

reactjs - Electron/React Redux中的两个窗口

javascript - 有 Angular ;错误: Component NewPharmacyComponent is not part of any NgModule or the module has not been imported into your module

typescript :将属性从一个对象映射到另一个对象

javascript - 提供者无法访问 redux store

reactjs - 如何使用 redux 更新状态中的 1 个项目?

javascript - Heroku 构建 MERN 堆栈 Web 应用程序失败

javascript - ReactJS 中的多语言网站

css - 将组件底部保持在其顶部组件的 50%