From a87a2c5cc7ddbe47236195e55d0b66a578050169 Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Mon, 28 Sep 2026 08:17:37 +0200 Subject: [PATCH 1/2] feat(preact-query*): support Preact v11 --- .changeset/preact-v11-peer-dependency.md | 7 +++++++ packages/preact-query-devtools/package.json | 2 +- packages/preact-query-persist-client/package.json | 2 +- packages/preact-query/package.json | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 .changeset/preact-v11-peer-dependency.md diff --git a/.changeset/preact-v11-peer-dependency.md b/.changeset/preact-v11-peer-dependency.md new file mode 100644 index 0000000000..360bf58d6f --- /dev/null +++ b/.changeset/preact-v11-peer-dependency.md @@ -0,0 +1,7 @@ +--- +'@tanstack/preact-query': patch +'@tanstack/preact-query-devtools': patch +'@tanstack/preact-query-persist-client': patch +--- + +Add Preact v11 to peerDependencies diff --git a/packages/preact-query-devtools/package.json b/packages/preact-query-devtools/package.json index fa7ecd600f..01b7025d86 100644 --- a/packages/preact-query-devtools/package.json +++ b/packages/preact-query-devtools/package.json @@ -89,6 +89,6 @@ }, "peerDependencies": { "@tanstack/preact-query": "workspace:^", - "preact": "^10.0.0" + "preact": "^10.0.0 || ^11.0.0-0" } } diff --git a/packages/preact-query-persist-client/package.json b/packages/preact-query-persist-client/package.json index 40d63c1f33..09fe66c4de 100644 --- a/packages/preact-query-persist-client/package.json +++ b/packages/preact-query-persist-client/package.json @@ -69,6 +69,6 @@ }, "peerDependencies": { "@tanstack/preact-query": "workspace:^", - "preact": "^10.0.0" + "preact": "^10.0.0 || ^11.0.0-0" } } diff --git a/packages/preact-query/package.json b/packages/preact-query/package.json index c31954e223..0624802a68 100644 --- a/packages/preact-query/package.json +++ b/packages/preact-query/package.json @@ -75,6 +75,6 @@ "typescript-eslint": "^8.54.0" }, "peerDependencies": { - "preact": "^10.0.0" + "preact": "^10.0.0 || ^11.0.0-0" } } From efd928fff493a59b86e13b962e6f65e1210106fe Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Mon, 28 Sep 2026 08:17:38 +0200 Subject: [PATCH 2/2] fix(preact-query*): pass an initial value to 'useRef' and flush deferred unmount effect cleanups in tests for Preact v11 --- .../src/__tests__/PreactQueryDevtools.test.tsx | 6 ++++-- .../src/__tests__/PreactQueryDevtoolsPanel.test.tsx | 6 ++++-- packages/preact-query-devtools/test-setup.ts | 5 ++++- packages/preact-query-persist-client/test-setup.ts | 5 ++++- packages/preact-query/src/__tests__/useQuery.test.tsx | 8 ++++++-- packages/preact-query/src/utils.ts | 2 +- packages/preact-query/test-setup.ts | 5 ++++- 7 files changed, 27 insertions(+), 10 deletions(-) diff --git a/packages/preact-query-devtools/src/__tests__/PreactQueryDevtools.test.tsx b/packages/preact-query-devtools/src/__tests__/PreactQueryDevtools.test.tsx index 75e69860ed..33862ef510 100644 --- a/packages/preact-query-devtools/src/__tests__/PreactQueryDevtools.test.tsx +++ b/packages/preact-query-devtools/src/__tests__/PreactQueryDevtools.test.tsx @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { render } from '@testing-library/preact' +import { act, render } from '@testing-library/preact' import { QueryClient, QueryClientProvider } from '@tanstack/preact-query' import { TanstackQueryDevtools } from '@tanstack/query-devtools' import type { PreactQueryDevtools as PreactQueryDevtoolsComponent } from '../PreactQueryDevtools' @@ -216,7 +216,9 @@ describe('PreactQueryDevtools', () => { it('should call "unmount" on the devtools instance when the component unmounts', () => { const { unmount } = render() - unmount() + act(() => { + unmount() + }) expect(unmountMock).toHaveBeenCalled() }) diff --git a/packages/preact-query-devtools/src/__tests__/PreactQueryDevtoolsPanel.test.tsx b/packages/preact-query-devtools/src/__tests__/PreactQueryDevtoolsPanel.test.tsx index 3eedadff41..586987bb9a 100644 --- a/packages/preact-query-devtools/src/__tests__/PreactQueryDevtoolsPanel.test.tsx +++ b/packages/preact-query-devtools/src/__tests__/PreactQueryDevtoolsPanel.test.tsx @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { render } from '@testing-library/preact' +import { act, render } from '@testing-library/preact' import { QueryClient, QueryClientProvider } from '@tanstack/preact-query' import { TanstackQueryDevtoolsPanel } from '@tanstack/query-devtools' import type { PreactQueryDevtoolsPanel as PreactQueryDevtoolsPanelComponent } from '../PreactQueryDevtoolsPanel' @@ -175,7 +175,9 @@ describe('PreactQueryDevtoolsPanel', () => { const { unmount } = render( , ) - unmount() + act(() => { + unmount() + }) expect(unmountMock).toHaveBeenCalled() }) diff --git a/packages/preact-query-devtools/test-setup.ts b/packages/preact-query-devtools/test-setup.ts index e7b70f873e..c509f3ae57 100644 --- a/packages/preact-query-devtools/test-setup.ts +++ b/packages/preact-query-devtools/test-setup.ts @@ -4,8 +4,11 @@ import { notifyManager } from '@tanstack/preact-query' import { afterEach } from 'vitest' // https://testing-library.com/docs/preact-testing-library/api#cleanup +// Wrap in act so effect cleanups Preact defers on unmount run synchronously afterEach(() => { - cleanupRTL() + act(() => { + cleanupRTL() + }) }) // Wrap notifications with act to make sure Preact knows about Query updates diff --git a/packages/preact-query-persist-client/test-setup.ts b/packages/preact-query-persist-client/test-setup.ts index 62f11f2a29..31f5c884e7 100644 --- a/packages/preact-query-persist-client/test-setup.ts +++ b/packages/preact-query-persist-client/test-setup.ts @@ -4,8 +4,11 @@ import { afterEach } from 'vitest' import { notifyManager } from '@tanstack/preact-query' // https://testing-library.com/docs/preact-testing-library/api#cleanup +// Wrap in act so effect cleanups Preact defers on unmount run synchronously afterEach(() => { - cleanupRTL() + act(() => { + cleanupRTL() + }) }) // Wrap notifications with act to make sure Preact knows about Query updates diff --git a/packages/preact-query/src/__tests__/useQuery.test.tsx b/packages/preact-query/src/__tests__/useQuery.test.tsx index 137e8c4393..c77a806c1c 100644 --- a/packages/preact-query/src/__tests__/useQuery.test.tsx +++ b/packages/preact-query/src/__tests__/useQuery.test.tsx @@ -3966,7 +3966,9 @@ describe('useQuery', () => { rendered.getByText('fetched data') const setTimeoutSpy = vi.spyOn(globalThis.window, 'setTimeout') - rendered.unmount() + act(() => { + rendered.unmount() + }) expect(setTimeoutSpy).not.toHaveBeenCalled() }) @@ -3990,7 +3992,9 @@ describe('useQuery', () => { const setTimeoutSpy = vi.spyOn(globalThis.window, 'setTimeout') - rendered.unmount() + act(() => { + rendered.unmount() + }) expect(setTimeoutSpy).toHaveBeenLastCalledWith( expect.any(Function), diff --git a/packages/preact-query/src/utils.ts b/packages/preact-query/src/utils.ts index 94a449dd18..85a31aba89 100644 --- a/packages/preact-query/src/utils.ts +++ b/packages/preact-query/src/utils.ts @@ -67,7 +67,7 @@ export function useSyncExternalStoreWithSelector( selector: (snapshot: TSnapshot) => TSelected, isEqual: (a: TSelected, b: TSelected) => boolean, ): TSelected { - const selectedSnapshotRef = useRef() + const selectedSnapshotRef = useRef(undefined) const getSelectedSnapshot = () => { const snapshot = getSnapshot() diff --git a/packages/preact-query/test-setup.ts b/packages/preact-query/test-setup.ts index 478cb07bdd..ec9fac062b 100644 --- a/packages/preact-query/test-setup.ts +++ b/packages/preact-query/test-setup.ts @@ -4,8 +4,11 @@ import { act, cleanup as cleanupRTL } from '@testing-library/preact' import { afterEach } from 'vitest' // https://testing-library.com/docs/preact-testing-library/api#cleanup +// Wrap in act so effect cleanups Preact defers on unmount run synchronously afterEach(() => { - cleanupRTL() + act(() => { + cleanupRTL() + }) }) // Wrap notifications with act to make sure React knows about React Query updates