From 24ae9fa07926cb37e302402fc9f09e84862318ef Mon Sep 17 00:00:00 2001 From: Ousama Ben Younes Date: Thu, 24 Sep 2026 20:43:48 +0000 Subject: [PATCH] fix(solid-query): resubscribe on client switch --- .changeset/solid-query-client-switch.md | 5 +++++ .../src/__tests__/PersistQueryClientProvider.test.tsx | 6 ++---- packages/solid-query/src/__tests__/useQuery.test.tsx | 4 +++- packages/solid-query/src/useBaseQuery.ts | 5 ++--- 4 files changed, 12 insertions(+), 8 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..68e71406bf2 --- /dev/null +++ b/.changeset/solid-query-client-switch.md @@ -0,0 +1,5 @@ +--- +'@tanstack/solid-query': patch +--- + +Subscribe to the new query observer when the query client accessor 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 195aeb201e9..dd0f5c33d37 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,19 @@ describe('PersistQueryClientProvider', () => { expect(queryFn2).toHaveBeenCalledTimes(1) expect(onSuccess).toHaveBeenCalledTimes(1) - expect(states).toHaveLength(3) - 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 890edae7a1c..2bde8271085 100644 --- a/packages/solid-query/src/__tests__/useQuery.test.tsx +++ b/packages/solid-query/src/__tests__/useQuery.test.tsx @@ -5776,7 +5776,9 @@ describe('useQuery', () => { 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(queryFn).toHaveBeenCalledTimes(2) }) diff --git a/packages/solid-query/src/useBaseQuery.ts b/packages/solid-query/src/useBaseQuery.ts index 1cc45a420ba..b9c1c318437 100644 --- a/packages/solid-query/src/useBaseQuery.ts +++ b/packages/solid-query/src/useBaseQuery.ts @@ -175,8 +175,7 @@ export function useBaseQuery< } } - const createClientSubscriber = () => { - const obs = observer() + const createClientSubscriber = (obs = observer()) => { return obs.subscribe((result) => { observerResult = result queueMicrotask(() => { @@ -320,7 +319,7 @@ export function useBaseQuery< unsubscribe() } const newObserver = new Observer(c, defaultedOptions()) - unsubscribe = createClientSubscriber() + unsubscribe = createClientSubscriber(newObserver) setObserver(newObserver) }, {