查询数据后如何清除RTK查询缓存?

问题描述 投票:0回答:3

我想从 RTK 查询中删除缓存,因为我的项目中有多个搜索字段,一旦我使用 api 搜索字段(rtk 查询)从 API 中搜索某些内容,它就会给我结果,但会保存在 RTK 查询中缓存。

之后,如果我使用另一个搜索字段(除了 rtk 查询)来搜索某些内容,我会得到结果,但之后如果我继续使用具有 API(下面的 rtk 查询)的同一搜索字段并进行搜索对于我第一次执行的相同查询,我无法再次获得结果,因为它保存在缓存中并且 RTK 查询将无法运行。

reactjs rtk-query
3个回答
3
投票

解决方案:这将立即删除所有现有的缓存条目,并且所有查询将被视为“未初始化”。因此,只需将以下代码放入 onClick 中或根据您的场景,这样当您点击输入请求时,缓存就会被清除。 下面的 api 是您将在商店中的 rtk 查询中设置的 api 名称。

   dispatch(api.util.resetApiState());

有关更多信息,请查看文档https://redux-toolkit.js.org/rtk-query/api/created-api/api-slice-utils


3
投票

正如上面Jamal的回答中提到的,您可以使用resetApiState()来清除整个api缓存。 如果需要清除特定端点的缓存,可以使用 useMutation() 挂钩返回的 Reset() 函数https://redux-toolkit.js.org/rtk-query/usage/mutations#performing-mutations-带反应钩子

[postData, {reset: resetPostDataCache}] = usePostMutation()
// this will reset cache for specific endpoint
resetPostDataCache()

0
投票

之前的答案对我不起作用,但以下方法却有效。

dispatch(apiSlice.util.updateQueryData("getPosts", undefined, () => []));

或者如果您使用适配器

dispatch(apiSlice.util.updateQueryData("getPosts", undefined, () => postsAdapter.removeAll(initialState)));
© www.soinside.com 2019 - 2024. All rights reserved.