react-query - react-query invalidateQueries 不适用于前缀/ URL
问题描述
我react-query
在 Ionic React 应用程序中使用 3.30。
我有一个分页查询:
export function useCardAdmin(
currentJsonUrl: string,
): UseQueryResult<JsonDataWidgetPagerRead, Error> {
const query = currentJsonUrl;
const queryKey = queryKeyUseWidgetAdmin(currentJsonUrl);
return useQuery<JsonDataWidgetPagerRead, Error>(
queryKey,
async () => fetchAuth(query, true),
{
keepPreviousData: true,
staleTime: DAY_MILLISECONDS,
cacheTime: DAY_MILLISECONDS,
},
);
}
export const queryKeyUseWidgetAdmin = (currentJsonUrl: string): string => (`getWidgetAdmin${currentJsonUrl}`);
这工作正常。
一个典型的查询键值是getCardsAdminhttps://example.com/jsonapi/widgets?&fields[widget]=id,drupalId,part,gadget,refGroup&filter[uid.id][value]=adadfasf-f992-489c-9519-038f1728e0db&sort=-created&page[limit]=25
但是,当用户更新小部件(PATCH 到服务器)时,我需要使查询无效。
所以我尝试了这个:
queryClient.invalidateQueries('getWidgetAdmin')
我希望所有以开头的查询都getWidgetAdmin
无效,因为文档说 invalidateQueries 的参数被视为前缀。但是,没有一个是无效的。
如果我使用确切的查询键,如下所示:
queryClient.invalidateQueries(queryKeyUseWidgetAdmin(currentJsonUrl))
然后查询无效。但我想使所有以 开头的查询无效getWidgetAdmin
,而不仅仅是其中一个。
我也试过设置exact
:
queryClient.invalidateQueries('getWidgetAdmin', { exact: false })
这也不起作用。
如何使一组查询无效react-query
?
附加信息:
我正在QueryClient()
使用一些自定义配置进行初始化,但即使我在queryClient
没有任何配置(const queryClient = new QueryClient();
)的情况下进行初始化,我仍然遇到同样的问题。
解决方案
模糊查询键匹配仅适用于数组。因此,如果您的密钥是:
['getWidgetAdmin', some, more, filters]
您可以使用以下方法模糊无效:
queryClient.invalidateQueries(['getWidgetAdmin'])
如果它确实需要一个字符串startsWith,你可以提供一个谓词函数(参见QueryFilters 文档):
queryClient.invalidateQueries({
predicate: (query) => query.queryKey.startsWith('getWidgetAdmin')})
推荐阅读
- ruby-on-rails - 使用缩进格式化文本
- spring-boot - Spring Boot 未加载活动的 application.properties 文件
- c# - 在令牌检索期间需要管理员同意的 Web 应用程序
- jquery-ui - 当隐藏目标区域位于下方时,JQuery UI 可排序项目未检测到固定目标区域
- django-rest-framework - 在 DRF 中创建发布请求时如何限制字段?
- linux - 如何使用 curl 模拟大文件的 ftp 传输?
- r - optimx() 的问题(“无法在初始参数处评估函数”)
- android - 树莓派屏幕镜像性能
- xml - 如果这些参数是 XML 标记/节点,如何在 XQuery 中处理用户定义的参数?
- mysql - MySQL查询的二进制数据在使用速记时是错误的