我想从 RTK 查询中删除缓存,因为我的项目中有多个搜索字段,一旦我使用 api 搜索字段(rtk 查询)从 API 中搜索某些内容,它就会给我结果,但会保存在 RTK 查询中缓存。
之后,如果我使用另一个搜索字段(除了 rtk 查询)来搜索某些内容,我会得到结果,但之后如果我继续使用具有 API(下面的 rtk 查询)的同一搜索字段并进行搜索对于我第一次执行的相同查询,我无法再次获得结果,因为它保存在缓存中并且 RTK 查询将无法运行。
解决方案:这将立即删除所有现有的缓存条目,并且所有查询将被视为“未初始化”。因此,只需将以下代码放入 onClick 中或根据您的场景,这样当您点击输入请求时,缓存就会被清除。 下面的 api 是您将在商店中的 rtk 查询中设置的 api 名称。
dispatch(api.util.resetApiState());
有关更多信息,请查看文档https://redux-toolkit.js.org/rtk-query/api/created-api/api-slice-utils
正如上面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()
之前的答案对我不起作用,但以下方法却有效。
dispatch(apiSlice.util.updateQueryData("getPosts", undefined, () => []));
或者如果您使用适配器
dispatch(apiSlice.util.updateQueryData("getPosts", undefined, () => postsAdapter.removeAll(initialState)));