reactjs - 无法在 createAsyncThunk 中将 getState 类型设置为 RootState
问题描述
我无法将返回类型设置getState()
为RootState
。我正在使用打字稿和 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 } };
我推荐这种避免循环依赖的方法,因为根状态总是依赖于切片,所以切片不应该依赖于根。
推荐阅读
- python - “for”循环中的 Python 异步任务
- python - os.system 在 python 中多次打开同一个应用程序
- sql - 如何动态跳过顶行 SQL
- r - 依靠 data.table 完成所有组合
- intellij-idea - Intellij 结构搜索 - 复杂的方法调用更改
- java - 你如何在颤振中保护一个宁静的 api 端点
- google-cloud-platform - 大查询“SELECT * EXCEPT”
- r - 添加一个节点并使用 igraph 与每个其他节点连接
- python - 命令:“from plone import api”产生错误
- php - 如何将对象存储在数据库中并使用 PHP 返回(无序列化或第 3 方)