Skip to content

fix(query-core): use supplied options for optimistic fetches - #12131

Merged
TkDodo merged 2 commits into
mainfrom
tkdodo/fix/suspense-query-function
Oct 19, 2026
Merged

TkDodo merged 2 commits into
mainfrom
tkdodo/fix/suspense-query-function

Conversation

@TkDodo

@TkDodo TkDodo commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

🎯 Changes

Pass the supplied options to Query.fetch from fetchOptimistic. This lets a mounted Suspense query use its local queryFn after broadcast recreates its cache entry without one.

Fixes #12129.

The regression test fails with Missing queryFn before the fix and receives the original 401 Unauthorized error after it. Core tests, core type checks and lint, and the React, Preact, Vue, and Lit test suites pass. The full pnpm run test:pr --base=HEAD~1 check passes (337 tasks).

✅ Checklist

  • I have followed the steps in the Contributing guide.
  • I have tested code changes locally with pnpm run test:pr, or these tests do not apply to this pull request.
  • I have followed the AI contribution policy and fully understand the code in this pull request, including any code generated with AI assistance.

🚀 Release Impact

  • This change affects published code, and I have generated a changeset.
  • This change is docs/CI/dev-only (no release).

Summary by CodeRabbit

  • Bug Fixes
    • Optimistic fetches now use the query options provided for the fetch, including when a query is recreated without a query function. Errors from the supplied query function are correctly propagated.

@coderabbitai

coderabbitai Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: TanStack/query/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c9e2d798-2e9d-4328-99c2-5b5a0f7d68d4
📥 Commits

Reviewing files that changed from the base of the PR and between 8c3f218 and 10dd666.

📒 Files selected for processing: 3
  • .changeset/brown-spoons-occur.md
  • packages/query-core/src/__tests__/queryObserver.test.tsx
  • packages/query-core/src/queryObserver.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

📝 Walkthrough

QueryObserver.fetchOptimistic now passes its defaulted options to query.fetch. A regression test checks behavior when the observer’s query is recreated without a queryFn.

Changes: Optimistic fetch options

Layer / File(s) Summary
Pass observer options during optimistic fetch
packages/query-core/src/queryObserver.ts, packages/query-core/src/__tests__/queryObserver.test.tsx, .changeset/brown-spoons-occur.md
fetchOptimistic passes defaulted options to query.fetch. The regression test checks that the supplied queryFn runs once and its rejection propagates. A patch changeset records the change.

Priority: ➖ Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix · Severity of issue fixed: Medium

Suggested reviewers: amariahak

Merge Risk: ⚪ Minimal · up to 10dd6

The fix supports the reported optimistic-fetch scenario, with no identified issue requiring resolution before merge.

Pre-merge checks: Passed 5
Check name Status Explanation
Title check Passed The title clearly and concisely describes the primary change: passing supplied options to optimistic fetches in query-core.
Description check Passed The description includes the required Changes, Checklist, and Release Impact sections. It explains the motivation, test coverage, linked issue, and changeset status. All checklist items are marked app…
Linked Issues check Passed Issue #12129 requires fetchOptimistic to pass the observer options to Query.fetch when a recreated query has no queryFn. At the reviewed head, packages/query-core/src/queryObserver.ts calls `q…
Out of Scope Changes check Passed The changes are limited to the required queryObserver.ts fetch call, its regression test, and a patch changeset for @tanstack/query-core. These changes directly support issue #12129. No unrelated …
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2…
Full details: Description check

Explanation

The description includes the required Changes, Checklist, and Release Impact sections. It explains the motivation, test coverage, linked issue, and changeset status. All checklist items are marked appropriately.

Full details: Linked Issues check

Explanation

Issue #12129 requires fetchOptimistic to pass the observer options to Query.fetch when a recreated query has no queryFn. At the reviewed head, packages/query-core/src/queryObserver.ts calls query.fetch(defaultedOptions). The supplied regression-test summary for packages/query-core/src/__tests__/queryObserver.test.tsx verifies that the supplied queryFn runs once and that its rejection propagates. This implements the required behavior and test coverage.

Full details: Out of Scope Changes check

Explanation

The changes are limited to the required queryObserver.ts fetch call, its regression test, and a patch changeset for @tanstack/query-core. These changes directly support issue #12129. No unrelated change is identified.

Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2 files. (1 skipped: 1 unsupported.)

✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@changeset-bot

changeset-bot Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 10dd666

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 24 packages
Name Type
@tanstack/query-core Patch
@tanstack/angular-query-experimental Patch
@tanstack/lit-query Patch
@tanstack/preact-query Patch
@tanstack/query-async-storage-persister Patch
@tanstack/query-broadcast-client-experimental Patch
@tanstack/query-devtools Patch
@tanstack/query-persist-client-core Patch
@tanstack/query-sync-storage-persister Patch
@tanstack/react-query Patch
@tanstack/solid-query Patch
@tanstack/svelte-query Patch
@tanstack/vue-query Patch
@tanstack/preact-query-devtools Patch
@tanstack/preact-query-persist-client Patch
@tanstack/react-query-devtools Patch
@tanstack/solid-query-devtools Patch
@tanstack/svelte-query-devtools Patch
@tanstack/vue-query-devtools Patch
@tanstack/react-query-persist-client Patch
@tanstack/solid-query-persist-client Patch
@tanstack/svelte-query-persist-client Patch
@tanstack/react-query-next-experimental Patch
@tanstack/eslint-plugin-query Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@nx-cloud

nx-cloud Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

View your CI Pipeline Execution ↗ for commit 10dd666

Command Status Duration Result
nx affected --targets=test:sherif,test:knip,tes... ✅ Succeeded 1m 38s View ↗
nx run-many --target=build --exclude=examples/*... ✅ Succeeded 1s View ↗

☁️ Nx Cloud last updated this comment at 2026-10-19 15:53:41 UTC

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Changeset Version Preview

3 package(s) bumped directly, 21 bumped as dependents.

🟩 Patch bumps

Package Version Reason
@tanstack/preact-query 5.104.4 → 5.104.5 Changeset
@tanstack/query-core 5.104.4 → 5.104.5 Changeset
@tanstack/react-query 5.104.4 → 5.104.5 Changeset
@tanstack/angular-query-experimental 5.104.4 → 5.104.5 Dependent
@tanstack/eslint-plugin-query 5.104.4 → 5.104.5 Dependent
@tanstack/lit-query 0.2.29 → 0.2.30 Dependent
@tanstack/preact-query-devtools 5.104.4 → 5.104.5 Dependent
@tanstack/preact-query-persist-client 5.104.4 → 5.104.5 Dependent
@tanstack/query-async-storage-persister 5.104.4 → 5.104.5 Dependent
@tanstack/query-broadcast-client-experimental 5.104.4 → 5.104.5 Dependent
@tanstack/query-devtools 5.104.4 → 5.104.5 Dependent
@tanstack/query-persist-client-core 5.104.4 → 5.104.5 Dependent
@tanstack/query-sync-storage-persister 5.104.4 → 5.104.5 Dependent
@tanstack/react-query-devtools 5.104.4 → 5.104.5 Dependent
@tanstack/react-query-next-experimental 5.104.4 → 5.104.5 Dependent
@tanstack/react-query-persist-client 5.104.4 → 5.104.5 Dependent
@tanstack/solid-query 5.104.4 → 5.104.5 Dependent
@tanstack/solid-query-devtools 5.104.4 → 5.104.5 Dependent
@tanstack/solid-query-persist-client 5.104.4 → 5.104.5 Dependent
@tanstack/svelte-query 6.3.4 → 6.3.5 Dependent
@tanstack/svelte-query-devtools 6.3.4 → 6.3.5 Dependent
@tanstack/svelte-query-persist-client 6.3.4 → 6.3.5 Dependent
@tanstack/vue-query 5.104.4 → 5.104.5 Dependent
@tanstack/vue-query-devtools 6.3.4 → 6.3.5 Dependent

@pkg-pr-new

pkg-pr-new Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
More templates

@tanstack/angular-query-experimental

npm i https://pkg.pr.new/@tanstack/angular-query-experimental@12131

@tanstack/eslint-plugin-query

npm i https://pkg.pr.new/@tanstack/eslint-plugin-query@12131

@tanstack/lit-query

npm i https://pkg.pr.new/@tanstack/lit-query@12131

@tanstack/preact-query

npm i https://pkg.pr.new/@tanstack/preact-query@12131

@tanstack/preact-query-devtools

npm i https://pkg.pr.new/@tanstack/preact-query-devtools@12131

@tanstack/preact-query-persist-client

npm i https://pkg.pr.new/@tanstack/preact-query-persist-client@12131

@tanstack/query-async-storage-persister

npm i https://pkg.pr.new/@tanstack/query-async-storage-persister@12131

@tanstack/query-broadcast-client-experimental

npm i https://pkg.pr.new/@tanstack/query-broadcast-client-experimental@12131

@tanstack/query-core

npm i https://pkg.pr.new/@tanstack/query-core@12131

@tanstack/query-devtools

npm i https://pkg.pr.new/@tanstack/query-devtools@12131

@tanstack/query-persist-client-core

npm i https://pkg.pr.new/@tanstack/query-persist-client-core@12131

@tanstack/query-sync-storage-persister

npm i https://pkg.pr.new/@tanstack/query-sync-storage-persister@12131

@tanstack/react-query

npm i https://pkg.pr.new/@tanstack/react-query@12131

@tanstack/react-query-devtools

npm i https://pkg.pr.new/@tanstack/react-query-devtools@12131

@tanstack/react-query-next-experimental

npm i https://pkg.pr.new/@tanstack/react-query-next-experimental@12131

@tanstack/react-query-persist-client

npm i https://pkg.pr.new/@tanstack/react-query-persist-client@12131

@tanstack/solid-query

npm i https://pkg.pr.new/@tanstack/solid-query@12131

@tanstack/solid-query-devtools

npm i https://pkg.pr.new/@tanstack/solid-query-devtools@12131

@tanstack/solid-query-persist-client

npm i https://pkg.pr.new/@tanstack/solid-query-persist-client@12131

@tanstack/svelte-query

npm i https://pkg.pr.new/@tanstack/svelte-query@12131

@tanstack/svelte-query-devtools

npm i https://pkg.pr.new/@tanstack/svelte-query-devtools@12131

@tanstack/svelte-query-persist-client

npm i https://pkg.pr.new/@tanstack/svelte-query-persist-client@12131

@tanstack/vue-query

npm i https://pkg.pr.new/@tanstack/vue-query@12131

@tanstack/vue-query-devtools

npm i https://pkg.pr.new/@tanstack/vue-query-devtools@12131

commit: 10dd666

@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

Path Size
react full 11.76 KB (+0.01% 🔺)
react minimal 8.59 KB (-0.04% 🔽)

@TkDodo
TkDodo marked this pull request as ready for review October 19, 2026 15:51
@TkDodo
TkDodo merged commit f608f93 into main Oct 19, 2026
9 checks passed
@TkDodo
TkDodo deleted the tkdodo/fix/suspense-query-function branch October 19, 2026 16:42
@github-actions github-actions Bot mentioned this pull request Oct 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

useSuspenseQuery fails with "Missing queryFn" for a query that broadcastQueryClient re-created from another tab

1 participant