Skip to content

Add React deferred fragment suspense#3888

Draft
JoviDeCroock wants to merge 6 commits into
mainfrom
codex/react-defer-suspense-promises
Draft

Add React deferred fragment suspense#3888
JoviDeCroock wants to merge 6 commits into
mainfrom
codex/react-defer-suspense-promises

Conversation

@JoviDeCroock

Copy link
Copy Markdown
Collaborator

Summary

  • Add a beta React useFragment hook for masking fragment data
  • Add stable stream-backed promises for missing @defer selections in useQuery
  • Resolve deferred fragment Suspense from later query results without requiring a parent rerender

Refs #3628.

@changeset-bot

changeset-bot Bot commented Jun 13, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: eea0f1c

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

This PR includes changesets to release 3 packages
Name Type
urql Minor
@urql/core Minor
@urql/preact Minor

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

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 13, 2026

Copy link
Copy Markdown

Deploying urql with  Cloudflare Pages  Cloudflare Pages

Latest commit: eea0f1c
Status: ✅  Deploy successful!
Preview URL: https://5248001f.urql.pages.dev
Branch Preview URL: https://codex-react-defer-suspense-p.urql.pages.dev

View logs

@JoviDeCroock JoviDeCroock marked this pull request as draft June 13, 2026 05:42
@JoviDeCroock JoviDeCroock force-pushed the codex/react-defer-suspense-promises branch 2 times, most recently from a8bb560 to 6f85ec3 Compare June 14, 2026 06:54
@JoviDeCroock JoviDeCroock force-pushed the codex/react-defer-suspense-promises branch from 6f85ec3 to 1e98de5 Compare June 15, 2026 06:06
JoviDeCroock and others added 3 commits June 16, 2026 18:11
Move the framework-agnostic fragment-masking and deferred-fragment logic
behind React's BETA useFragment hook into @urql/core so other bindings can
reuse it, and add a BETA useFragment hook to @urql/preact built on it.

- @urql/core: new BETA exports maskFragment, updateDeferredResult,
  makeDeferredState, resolveDeferredState, isDeferredPromise,
  getDeferredCacheForClient + the generic makeCache factory and selection
  AST helpers. The operations$ subscription only attaches when a binding
  requests a cache, so core stays side-effect-free at import.
- urql (React): consume the moved helpers from @urql/core; delete the local
  selection.ts/defer.ts; reduce cache.ts to thin makeCache wrappers. No
  behaviour change.
- @urql/preact: new BETA useFragment hook mirroring React, with
  updateDeferredResult wired into the suspense query stream.

Adds core unit tests for selection/defer/maskFragment and Preact useFragment
tests. Existing react-urql useFragment tests pass unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.

1 participant