From 5b6765a3ef15c8d948639c8895658d2786afe968 Mon Sep 17 00:00:00 2001 From: gopnik5 Date: Thu, 10 Apr 2025 15:13:21 -0400 Subject: [PATCH 1/2] fix(solid-query): client() doesn't return undefined --- packages/solid-query/src/useBaseQuery.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/solid-query/src/useBaseQuery.ts b/packages/solid-query/src/useBaseQuery.ts index 0b504ed0a7..d6b967831c 100644 --- a/packages/solid-query/src/useBaseQuery.ts +++ b/packages/solid-query/src/useBaseQuery.ts @@ -116,7 +116,11 @@ export function useBaseQuery< ) { type ResourceData = QueryObserverResult - const client = createMemo(() => useQueryClient(queryClient?.())) + const client = createMemo( + () => useQueryClient(queryClient?.()), + useQueryClient(queryClient?.()), + ) + const isRestoring = useIsRestoring() // There are times when we run a query on the server but the resource is never read // This could lead to times when the queryObserver is unsubscribed before the resource has loaded From 04ac1dd201c20b58fb5e02e2869d6381957b0c82 Mon Sep 17 00:00:00 2001 From: gopnik5 Date: Mon, 14 Apr 2025 13:33:53 -0400 Subject: [PATCH 2/2] test(solid-query): correctly manage dependent queries --- packages/solid-query/package.json | 1 + .../src/__tests__/useQuery.test.tsx | 77 +++++++++++++++++++ pnpm-lock.yaml | 77 ++++++++++--------- 3 files changed, 118 insertions(+), 37 deletions(-) diff --git a/packages/solid-query/package.json b/packages/solid-query/package.json index 2f63f4914e..ef0646592b 100644 --- a/packages/solid-query/package.json +++ b/packages/solid-query/package.json @@ -69,6 +69,7 @@ }, "devDependencies": { "@solidjs/testing-library": "^0.8.10", + "@solidjs/router": "^0.15.3", "npm-run-all2": "^5.0.0", "solid-js": "^1.9.5", "tsup-preset-solid": "^2.2.0", diff --git a/packages/solid-query/src/__tests__/useQuery.test.tsx b/packages/solid-query/src/__tests__/useQuery.test.tsx index 70914603b7..9ea6f6520e 100644 --- a/packages/solid-query/src/__tests__/useQuery.test.tsx +++ b/packages/solid-query/src/__tests__/useQuery.test.tsx @@ -2,6 +2,7 @@ import { describe, expect, expectTypeOf, it, vi } from 'vitest' import { ErrorBoundary, Match, + Suspense, Switch, createEffect, createMemo, @@ -11,6 +12,7 @@ import { } from 'solid-js' import { fireEvent, render, waitFor } from '@solidjs/testing-library' import { reconcile } from 'solid-js/store' +import { MemoryRouter, Route, createMemoryHistory } from '@solidjs/router' import { QueryCache, QueryClientProvider, keepPreviousData, useQuery } from '..' import { Blink, @@ -6045,4 +6047,79 @@ describe('useQuery', () => { await waitFor(() => rendered.getByText('Status: custom client')) }) + + // See https://github.com/tannerlinsley/react-query/issues/8469 + it('should correctly manage dependent queries', async () => { + const queryCache = new QueryCache() + const queryClient = createQueryClient({ queryCache }) + + const history = createMemoryHistory() + + const errorHandler = vi.fn<(err: unknown) => void>() + + function App() { + return ( + { + errorHandler(err) + return err.message + }} + > + + + + + + + + ) + } + + queryClient.setQueryData(['parent'], { id: 123 }) + + function Index() { + return 'Index' + } + + function Sub() { + const parent = useQuery(() => ({ + queryKey: ['parent'], + async queryFn() { + await new Promise((r) => setTimeout(r, 100)) + return { + id: 123, + } + }, + })) + + const childQuery = useQuery(() => ({ + queryKey: ['sub', parent.data?.id], + async queryFn() { + await new Promise((r) => setTimeout(r, 200)) + return Promise.resolve('child' + parent.data?.id) + }, + })) + return
{childQuery.data}
+ } + + const rendered = render(() => ( + + + + )) + + await waitFor(() => rendered.getByText('Index')) + + history.set({ + value: '/sub', + }) + + await sleep(200) + + expect(errorHandler).not.toHaveBeenCalled() + + await waitFor(() => { + expect(rendered.getByText('child123')).toBeInTheDocument() + }) + }) }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9146119b77..27f0537b6d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1184,7 +1184,7 @@ importers: version: 6.1.18(react-native@0.76.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@react-native-community/cli-server-api@13.6.9(encoding@0.1.13))(@types/react@19.0.1)(encoding@0.1.13)(react@19.0.0))(react@19.0.0) '@react-navigation/stack': specifier: ^6.4.1 - version: 6.4.1(44i6xs33lapt7cl2pkawmwjtru) + version: 6.4.1(e9c097e00fee89f3cf54c317dda4adb5) '@tanstack/react-query': specifier: workspace:* version: link:../../../packages/react-query @@ -2003,7 +2003,7 @@ importers: devDependencies: '@angular-devkit/build-angular': specifier: ^19.2.5 - version: 19.2.5(@angular/compiler-cli@19.2.4(@angular/compiler@19.2.4)(typescript@5.8.2))(@angular/compiler@19.2.4)(@types/node@22.14.0)(chokidar@4.0.3)(html-webpack-plugin@5.6.3(webpack@5.98.0(esbuild@0.25.1)))(jiti@2.4.2)(lightningcss@1.29.2)(tailwindcss@4.0.14)(typescript@5.8.2)(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(less@4.2.2)(lightningcss@1.29.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.6.1))(yaml@2.6.1) + version: 19.2.5(@angular/compiler-cli@19.2.4(@angular/compiler@19.2.4)(typescript@5.8.2))(@angular/compiler@19.2.4)(@types/node@22.14.0)(chokidar@4.0.3)(html-webpack-plugin@5.6.3(webpack@5.98.0(esbuild@0.25.2)))(jiti@2.4.2)(lightningcss@1.29.2)(tailwindcss@4.0.14)(typescript@5.8.2)(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(less@4.2.2)(lightningcss@1.29.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.6.1))(yaml@2.6.1) '@angular/cli': specifier: ^19.2.5 version: 19.2.5(@types/node@22.14.0)(chokidar@4.0.3) @@ -2526,6 +2526,9 @@ importers: packages/solid-query: dependencies: + '@solidjs/router': + specifier: ^0.15.3 + version: 0.15.3(solid-js@1.9.5) '@tanstack/query-core': specifier: workspace:* version: link:../query-core @@ -15989,11 +15992,11 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/build-angular@19.2.5(@angular/compiler-cli@19.2.4(@angular/compiler@19.2.4)(typescript@5.8.2))(@angular/compiler@19.2.4)(@types/node@22.14.0)(chokidar@4.0.3)(html-webpack-plugin@5.6.3(webpack@5.98.0(esbuild@0.25.1)))(jiti@2.4.2)(lightningcss@1.29.2)(tailwindcss@4.0.14)(typescript@5.8.2)(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(less@4.2.2)(lightningcss@1.29.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.6.1))(yaml@2.6.1)': + '@angular-devkit/build-angular@19.2.5(@angular/compiler-cli@19.2.4(@angular/compiler@19.2.4)(typescript@5.8.2))(@angular/compiler@19.2.4)(@types/node@22.14.0)(chokidar@4.0.3)(html-webpack-plugin@5.6.3(webpack@5.98.0(esbuild@0.25.2)))(jiti@2.4.2)(lightningcss@1.29.2)(tailwindcss@4.0.14)(typescript@5.8.2)(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(less@4.2.2)(lightningcss@1.29.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.6.1))(yaml@2.6.1)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1902.5(chokidar@4.0.3) - '@angular-devkit/build-webpack': 0.1902.5(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.1)))(webpack@5.98.0(esbuild@0.25.1)) + '@angular-devkit/build-webpack': 0.1902.5(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.2)))(webpack@5.98.0(esbuild@0.25.1)) '@angular-devkit/core': 19.2.5(chokidar@4.0.3) '@angular/build': 19.2.5(@angular/compiler-cli@19.2.4(@angular/compiler@19.2.4)(typescript@5.8.2))(@angular/compiler@19.2.4)(@types/node@22.14.0)(chokidar@4.0.3)(jiti@2.4.2)(less@4.2.2)(lightningcss@1.29.2)(postcss@8.5.2)(tailwindcss@4.0.14)(terser@5.39.0)(typescript@5.8.2)(yaml@2.6.1) '@angular/compiler-cli': 19.2.4(@angular/compiler@19.2.4)(typescript@5.8.2) @@ -16043,11 +16046,11 @@ snapshots: tree-kill: 1.2.2 tslib: 2.8.1 typescript: 5.8.2 - webpack: 5.98.0(esbuild@0.25.1) - webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.1)) - webpack-dev-server: 5.2.0(webpack@5.98.0(esbuild@0.25.1)) + webpack: 5.98.0(esbuild@0.25.2) + webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.2)) + webpack-dev-server: 5.2.0(webpack@5.98.0(esbuild@0.25.2)) webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(webpack@5.98.0(esbuild@0.25.1)))(webpack@5.98.0(esbuild@0.25.1)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(webpack@5.98.0(esbuild@0.25.2)))(webpack@5.98.0(esbuild@0.25.1)) optionalDependencies: esbuild: 0.25.1 tailwindcss: 4.0.14 @@ -16074,12 +16077,12 @@ snapshots: - webpack-cli - yaml - '@angular-devkit/build-webpack@0.1902.5(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.1)))(webpack@5.98.0(esbuild@0.25.1))': + '@angular-devkit/build-webpack@0.1902.5(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.2)))(webpack@5.98.0(esbuild@0.25.1))': dependencies: '@angular-devkit/architect': 0.1902.5(chokidar@4.0.3) rxjs: 7.8.1 - webpack: 5.98.0(esbuild@0.25.1) - webpack-dev-server: 5.2.0(webpack@5.98.0(esbuild@0.25.1)) + webpack: 5.98.0(esbuild@0.25.2) + webpack-dev-server: 5.2.0(webpack@5.98.0(esbuild@0.25.2)) transitivePeerDependencies: - chokidar @@ -19318,7 +19321,7 @@ snapshots: dependencies: '@angular/compiler-cli': 19.2.4(@angular/compiler@19.2.4)(typescript@5.8.2) typescript: 5.8.2 - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) '@nodelib/fs.scandir@2.1.5': dependencies: @@ -19763,7 +19766,7 @@ snapshots: dependencies: nanoid: 3.3.8 - '@react-navigation/stack@6.4.1(44i6xs33lapt7cl2pkawmwjtru)': + '@react-navigation/stack@6.4.1(e9c097e00fee89f3cf54c317dda4adb5)': dependencies: '@react-navigation/elements': 1.3.31(@react-navigation/native@6.1.18(react-native@0.76.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@react-native-community/cli-server-api@13.6.9(encoding@0.1.13))(@types/react@19.0.1)(encoding@0.1.13)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@4.12.0(react-native@0.76.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@react-native-community/cli-server-api@13.6.9(encoding@0.1.13))(@types/react@19.0.1)(encoding@0.1.13)(react@19.0.0))(react@19.0.0))(react-native@0.76.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@react-native-community/cli-server-api@13.6.9(encoding@0.1.13))(@types/react@19.0.1)(encoding@0.1.13)(react@19.0.0))(react@19.0.0) '@react-navigation/native': 6.1.18(react-native@0.76.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@react-native-community/cli-server-api@13.6.9(encoding@0.1.13))(@types/react@19.0.1)(encoding@0.1.13)(react@19.0.0))(react@19.0.0) @@ -21965,7 +21968,7 @@ snapshots: '@babel/core': 7.26.10 find-cache-dir: 4.0.0 schema-utils: 4.3.0 - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) babel-loader@9.2.1(@babel/core@7.26.10)(webpack@5.98.0): dependencies: @@ -22899,7 +22902,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) core-js-compat@3.40.0: dependencies: @@ -23112,7 +23115,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.1 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) css-select@4.3.0: dependencies: @@ -25188,7 +25191,7 @@ snapshots: util.promisify: 1.0.0 webpack: 4.44.2(webpack-cli@4.10.0) - html-webpack-plugin@5.6.3(webpack@5.98.0(esbuild@0.25.1)): + html-webpack-plugin@5.6.3(webpack@5.98.0(esbuild@0.25.2)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -25196,7 +25199,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) optional: true html-webpack-plugin@5.6.3(webpack@5.98.0): @@ -26113,7 +26116,7 @@ snapshots: dependencies: less: 4.2.2 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) less@4.2.2: dependencies: @@ -26140,7 +26143,7 @@ snapshots: dependencies: webpack-sources: 3.2.3 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) lie@3.1.1: dependencies: @@ -27139,7 +27142,7 @@ snapshots: dependencies: schema-utils: 4.3.0 tapable: 2.2.1 - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) minimalistic-assert@1.0.1: {} @@ -28376,7 +28379,7 @@ snapshots: postcss: 8.5.2 semver: 7.7.1 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) transitivePeerDependencies: - typescript @@ -29391,7 +29394,7 @@ snapshots: neo-async: 2.6.2 optionalDependencies: sass: 1.85.0 - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) sass@1.85.0: dependencies: @@ -29860,7 +29863,7 @@ snapshots: dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) source-map-resolve@0.5.3: dependencies: @@ -30336,16 +30339,16 @@ snapshots: webpack-sources: 1.4.3 worker-farm: 1.7.0 - terser-webpack-plugin@5.3.11(esbuild@0.25.2)(webpack@5.98.0(esbuild@0.25.1)): + terser-webpack-plugin@5.3.11(esbuild@0.25.1)(webpack@5.98.0(esbuild@0.25.2)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 terser: 5.39.0 - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) optionalDependencies: - esbuild: 0.25.2 + esbuild: 0.25.1 terser-webpack-plugin@5.3.11(esbuild@0.25.2)(webpack@5.98.0): dependencies: @@ -31548,7 +31551,7 @@ snapshots: webpack: 5.98.0(esbuild@0.25.2)(webpack-cli@5.1.4) webpack-merge: 5.10.0 - webpack-dev-middleware@7.4.2(webpack@5.98.0(esbuild@0.25.1)): + webpack-dev-middleware@7.4.2(webpack@5.98.0(esbuild@0.25.2)): dependencies: colorette: 2.0.20 memfs: 4.17.0 @@ -31557,9 +31560,9 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.0 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) - webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.1)): + webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.2)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -31586,10 +31589,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.1)) + webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.2)) ws: 8.18.0 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) transitivePeerDependencies: - bufferutil - debug @@ -31615,12 +31618,12 @@ snapshots: webpack-sources@3.2.3: {} - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(webpack@5.98.0(esbuild@0.25.1)))(webpack@5.98.0(esbuild@0.25.1)): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(webpack@5.98.0(esbuild@0.25.2)))(webpack@5.98.0(esbuild@0.25.1)): dependencies: typed-assert: 1.0.9 - webpack: 5.98.0(esbuild@0.25.1) + webpack: 5.98.0(esbuild@0.25.2) optionalDependencies: - html-webpack-plugin: 5.6.3(webpack@5.98.0(esbuild@0.25.1)) + html-webpack-plugin: 5.6.3(webpack@5.98.0(esbuild@0.25.2)) webpack-virtual-modules@0.6.2: {} @@ -31654,7 +31657,7 @@ snapshots: transitivePeerDependencies: - supports-color - webpack@5.98.0(esbuild@0.25.1): + webpack@5.98.0(esbuild@0.25.2): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.7 @@ -31676,7 +31679,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.11(esbuild@0.25.2)(webpack@5.98.0(esbuild@0.25.1)) + terser-webpack-plugin: 5.3.11(esbuild@0.25.1)(webpack@5.98.0(esbuild@0.25.2)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: