From 76d318644d52151a8781c9ba1320a9542c10ac4e Mon Sep 17 00:00:00 2001 From: devchangjun Date: Mon, 13 Jul 2026 20:53:15 +0900 Subject: [PATCH] fix(solid-query): expose deferred SSR query errors Deferred server queries settle in the resource while the proxy-backed store remains on its optimistic result. Read settled properties from the resource during SSR so query.error and the related status are renderable without forcing an ErrorBoundary. Constraint: Preserve initial-error resolution used by SolidStart redirect flows. Rejected: Reject the server resource for initial errors | would force ErrorBoundary handling and regress redirect behavior from #9841. Confidence: high Scope-risk: narrow Directive: Keep server property reads aligned with the serialized resource result. Tested: Solid Query ESLint, TypeScript current, 322 library tests, package build, and manual Node SSR render. Not-tested: Automated SSR regression test because the current Vitest project resolves Solid's browser build. Related: TanStack/query#8300 --- .changeset/settled-ssr-state.md | 5 +++++ packages/solid-query/src/useBaseQuery.ts | 10 ++++++++++ 2 files changed, 15 insertions(+) create mode 100644 .changeset/settled-ssr-state.md diff --git a/.changeset/settled-ssr-state.md b/.changeset/settled-ssr-state.md new file mode 100644 index 00000000000..1813c364094 --- /dev/null +++ b/.changeset/settled-ssr-state.md @@ -0,0 +1,5 @@ +--- +'@tanstack/solid-query': patch +--- + +Expose settled query state when rendering deferred queries during SSR. diff --git a/packages/solid-query/src/useBaseQuery.ts b/packages/solid-query/src/useBaseQuery.ts index 773d0719e0c..665340fd84f 100644 --- a/packages/solid-query/src/useBaseQuery.ts +++ b/packages/solid-query/src/useBaseQuery.ts @@ -375,6 +375,16 @@ export function useBaseQuery< target: QueryObserverResult, prop: keyof QueryObserverResult, ): any { + // The server subscriber resolves the resource without updating `state`. + // Read the settled resource so deferred SSR renders do not stay frozen + // on the initial optimistic result. + if (isServer) { + const resolved = queryResource() + if (resolved && prop in resolved) { + return Reflect.get(resolved, prop) + } + } + if (prop === 'data') { if (state.data !== undefined) { return queryResource.latest?.data