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
Member

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: cdacbab

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: cdacbab
Status: ✅  Deploy successful!
Preview URL: https://f28a8914.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 3 times, most recently from 6f85ec3 to 1e98de5 Compare June 15, 2026 06:06
JoviDeCroock and others added 6 commits July 3, 2026 08:47
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>
@JoviDeCroock
JoviDeCroock force-pushed the codex/react-defer-suspense-promises branch from eea0f1c to cdacbab Compare July 3, 2026 08:48
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