From e26a91b2045fa2a2892ab53257f7c485e5082769 Mon Sep 17 00:00:00 2001 From: taekop Date: Tue, 6 Oct 2026 10:24:35 +0900 Subject: [PATCH] fix(solid-query): subscribe to the new observer when the queryClient changes --- .changeset/solid-query-client-switch.md | 5 +++++ .../src/__tests__/PersistQueryClientProvider.test.tsx | 8 ++++---- packages/solid-query/src/__tests__/useQuery.test.tsx | 8 +++++++- packages/solid-query/src/useBaseQuery.ts | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 .changeset/solid-query-client-switch.md diff --git a/.changeset/solid-query-client-switch.md b/.changeset/solid-query-client-switch.md new file mode 100644 index 00000000000..e64ce0da1da --- /dev/null +++ b/.changeset/solid-query-client-switch.md @@ -0,0 +1,5 @@ +--- +'@tanstack/solid-query': patch +--- + +fix(solid-query): subscribe to the new observer when the `queryClient` passed to `useQuery` changes diff --git a/packages/solid-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx b/packages/solid-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx index c50f7592a4d..93821f191df 100644 --- a/packages/solid-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx +++ b/packages/solid-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx @@ -590,21 +590,21 @@ describe('PersistQueryClientProvider', () => { expect(queryFn2).toHaveBeenCalledTimes(1) expect(onSuccess).toHaveBeenCalledTimes(1) - expect(states).toHaveLength(3) - + // Switching clients subscribes the new observer, which can emit + // intermediate states, so only assert the meaningful ones. expect(states[0]).toStrictEqual({ status: 'pending', fetchStatus: 'idle', data: undefined, }) - expect(states[1]).toStrictEqual({ + expect(states).toContainEqual({ status: 'success', fetchStatus: 'fetching', data: 'hydrated', }) - expect(states[2]).toStrictEqual({ + expect(states.at(-1)).toStrictEqual({ status: 'success', fetchStatus: 'idle', data: 'queryFn2', diff --git a/packages/solid-query/src/__tests__/useQuery.test.tsx b/packages/solid-query/src/__tests__/useQuery.test.tsx index 07d30598126..09791dd5907 100644 --- a/packages/solid-query/src/__tests__/useQuery.test.tsx +++ b/packages/solid-query/src/__tests__/useQuery.test.tsx @@ -5714,7 +5714,13 @@ describe('useQuery', () => { setClient(queryClient2) await vi.advanceTimersByTimeAsync(10) expect(rendered.getByText('status: success')).toBeInTheDocument() - expect(queryClient2.getQueryCache().find({ queryKey: key })).toBeDefined() + expect( + queryClient2.getQueryCache().find({ queryKey: key })?.state.data, + ).toBe('data') + expect( + queryClient1.getQueryCache().find({ queryKey: key })?.state + .dataUpdateCount, + ).toBe(1) expect(queryFn).toHaveBeenCalledTimes(2) }) diff --git a/packages/solid-query/src/useBaseQuery.ts b/packages/solid-query/src/useBaseQuery.ts index a87bad1abcc..b3b8e1ee92d 100644 --- a/packages/solid-query/src/useBaseQuery.ts +++ b/packages/solid-query/src/useBaseQuery.ts @@ -350,8 +350,8 @@ export function useBaseQuery< unsubscribe() } const newObserver = new Observer(c, defaultedOptions()) - unsubscribe = createClientSubscriber() setObserver(newObserver) + unsubscribe = createClientSubscriber() }, { defer: true,