react-query invalidateQueries 不适用于前缀/ URL
react-query invalidateQueries not working with prefix / URLs
我在 Ionic React 应用程序中使用 react-query
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
开头的查询都无效 because the documentation says that the argument to invalidateQueries is treated as a prefix。但是,其中 none 个已失效。
如果我使用精确的查询键,像这样:
queryClient.invalidateQueries(queryKeyUseWidgetAdmin(currentJsonUrl))
则查询无效。但我想使所有以 getWidgetAdmin
开头的查询无效,而不仅仅是其中一个。
我也试过设置 exact
:
queryClient.invalidateQueries('getWidgetAdmin', { exact: false })
这也没有用。
如何使 react-query
中的一组查询无效?
附加信息:
我用一些自定义配置初始化 QueryClient()
,但即使我在没有任何配置 (const queryClient = new QueryClient();
) 的情况下初始化 queryClient
,我仍然遇到同样的问题。
模糊查询键匹配只对数组有效。所以如果你的密钥是:
['getWidgetAdmin', some, more, filters]
您可以模糊地使无效:
queryClient.invalidateQueries(['getWidgetAdmin'])
如果它确实需要是一个字符串 startsWith,您可以提供一个谓词函数(参见 QueryFilters documentation):
queryClient.invalidateQueries({
predicate: (query) => query.queryKey.startsWith('getWidgetAdmin')})
我在 Ionic React 应用程序中使用 react-query
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
开头的查询都无效 because the documentation says that the argument to invalidateQueries is treated as a prefix。但是,其中 none 个已失效。
如果我使用精确的查询键,像这样:
queryClient.invalidateQueries(queryKeyUseWidgetAdmin(currentJsonUrl))
则查询无效。但我想使所有以 getWidgetAdmin
开头的查询无效,而不仅仅是其中一个。
我也试过设置 exact
:
queryClient.invalidateQueries('getWidgetAdmin', { exact: false })
这也没有用。
如何使 react-query
中的一组查询无效?
附加信息:
我用一些自定义配置初始化 QueryClient()
,但即使我在没有任何配置 (const queryClient = new QueryClient();
) 的情况下初始化 queryClient
,我仍然遇到同样的问题。
模糊查询键匹配只对数组有效。所以如果你的密钥是:
['getWidgetAdmin', some, more, filters]
您可以模糊地使无效:
queryClient.invalidateQueries(['getWidgetAdmin'])
如果它确实需要是一个字符串 startsWith,您可以提供一个谓词函数(参见 QueryFilters documentation):
queryClient.invalidateQueries({
predicate: (query) => query.queryKey.startsWith('getWidgetAdmin')})