From b2a96a9af14449f81d66f869c4ddd8c8fb5ea80a Mon Sep 17 00:00:00 2001 From: Damian Osipiuk Date: Wed, 12 Nov 2025 13:21:39 +0100 Subject: [PATCH] feat(vue-query): support useQuery options getter --- .changeset/dark-birds-turn.md | 5 +++++ .../vue-query/src/__tests__/useQuery.test.ts | 18 ++++++++++++++++++ packages/vue-query/src/useBaseQuery.ts | 6 +++++- packages/vue-query/src/useQuery.ts | 16 ++++------------ 4 files changed, 32 insertions(+), 13 deletions(-) create mode 100644 .changeset/dark-birds-turn.md diff --git a/.changeset/dark-birds-turn.md b/.changeset/dark-birds-turn.md new file mode 100644 index 0000000000..567a45dde4 --- /dev/null +++ b/.changeset/dark-birds-turn.md @@ -0,0 +1,5 @@ +--- +'@tanstack/vue-query': minor +--- + +feat(vue-query): support useQuery options getter diff --git a/packages/vue-query/src/__tests__/useQuery.test.ts b/packages/vue-query/src/__tests__/useQuery.test.ts index c62b6c06de..f83ba374a3 100644 --- a/packages/vue-query/src/__tests__/useQuery.test.ts +++ b/packages/vue-query/src/__tests__/useQuery.test.ts @@ -44,6 +44,24 @@ describe('useQuery', () => { ) }) + test('should work with options getter', async () => { + const query = useQuery(() => ({ + queryKey: ['key01'], + queryFn: () => sleep(0).then(() => 'result01'), + })) + + await vi.advanceTimersByTimeAsync(0) + + expect(query).toMatchObject({ + status: { value: 'success' }, + data: { value: 'result01' }, + isPending: { value: false }, + isFetching: { value: false }, + isFetched: { value: true }, + isSuccess: { value: true }, + }) + }) + test('should return pending status initially', () => { const query = useQuery({ queryKey: ['key1'], diff --git a/packages/vue-query/src/useBaseQuery.ts b/packages/vue-query/src/useBaseQuery.ts index 2e9963e5f6..f5c444b3ae 100644 --- a/packages/vue-query/src/useBaseQuery.ts +++ b/packages/vue-query/src/useBaseQuery.ts @@ -82,7 +82,11 @@ export function useBaseQuery< const client = queryClient || useQueryClient() const defaultedOptions = computed(() => { - const clonedOptions = cloneDeepUnref(options as any) + let resolvedOptions = options + if (typeof resolvedOptions === 'function') { + resolvedOptions = resolvedOptions() + } + const clonedOptions = cloneDeepUnref(resolvedOptions as any) if (typeof clonedOptions.enabled === 'function') { clonedOptions.enabled = clonedOptions.enabled() diff --git a/packages/vue-query/src/useQuery.ts b/packages/vue-query/src/useQuery.ts index 3e1e825dcf..a64d5fc2d7 100644 --- a/packages/vue-query/src/useQuery.ts +++ b/packages/vue-query/src/useQuery.ts @@ -114,12 +114,8 @@ export function useQuery< TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, >( - options: UseQueryOptions< - TQueryFnData, - TError, - TData, - TQueryFnData, - TQueryKey + options: MaybeRefOrGetter< + UseQueryOptions >, queryClient?: QueryClient, ): UseQueryReturnType @@ -130,12 +126,8 @@ export function useQuery< TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, >( - options: UseQueryOptions< - TQueryFnData, - TError, - TData, - TQueryFnData, - TQueryKey + options: MaybeRefOrGetter< + UseQueryOptions >, queryClient?: QueryClient, ):