Skip to content

fix(react): keep loader results out of snapshots (FEP-2613) - #741

Merged
ENvironmentSet merged 3 commits into
mainfrom
feature/fep-2613-loader-result-reference
Jul 30, 2026
Merged

fix(react): keep loader results out of snapshots (FEP-2613)#741
ENvironmentSet merged 3 commits into
mainfrom
feature/fep-2613-loader-result-reference

Conversation

@ENvironmentSet

@ENvironmentSet ENvironmentSet commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator
  • Store loader promises in the plugin instance and write an opaque result ID to activity context.
  • Recreate deferred loader results with fresh IDs when loading snapshots, including paused navigation events.
  • Provide loader promises through an internal React Context so useLoaderData no longer reads activity context directly.

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 348e230d-fa16-43ed-8471-994709cbfb59

📥 Commits

Reviewing files that changed from the base of the PR and between 8ce8866 and 0c56baa.

📒 Files selected for processing (5)
  • .changeset/fep-2613-loader-result-reference.md
  • integrations/react/src/loader/LoaderResultContext.tsx
  • integrations/react/src/loader/LoaderResultStore.ts
  • integrations/react/src/loader/loaderPlugin.tsx
  • integrations/react/src/loader/useLoaderData.ts

Disabled knowledge base sources:

  • Jira integration is disabled
  • Linear integration is disabled

You can enable these sources in your CodeRabbit configuration.


📝 Walkthrough

Summary by CodeRabbit

  • Bug Fixes
    • Improved loader data handling across navigation and activity transitions.
    • Loader results are now preserved without being embedded directly in navigation snapshots.
    • useLoaderData continues to provide resolved loader data consistently, including deferred results.
    • Maintained error handling for rejected loader operations.

Walkthrough

Loader results are moved from serialized activity contexts into LoaderResultStore, with opaque IDs retained in activity contexts. The React loader plugin resolves stored promises and provides them through LoaderResultContext, while useLoaderData reads from that context.

Changes

Loader result reference flow

Layer / File(s) Summary
Store and React context
integrations/react/src/loader/LoaderResultStore.ts, integrations/react/src/loader/LoaderResultContext.tsx
Adds ID-based loader result storage, deferred execution, activity-context reference helpers, and a typed React context for stored promises.
Loader plugin lifecycle integration
integrations/react/src/loader/loaderPlugin.tsx
Updates initial, restored, paused, and before-route loader handling to store opaque IDs in activity contexts and provide resolved promises through LoaderResultContext.Provider.
Loader hook and release metadata
integrations/react/src/loader/useLoaderData.ts, .changeset/fep-2613-loader-result-reference.md
Makes useLoaderData read from LoaderResultContext and adds a patch changeset for @stackflow/react.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Navigation
  participant loaderPlugin
  participant LoaderResultStore
  participant Activity
  participant useLoaderData
  Navigation->>loaderPlugin: execute loader
  loaderPlugin->>LoaderResultStore: store result and create loaderResultId
  loaderPlugin->>Activity: write loaderResultId to activityContext
  loaderPlugin->>LoaderResultStore: retrieve promise by loaderResultId
  LoaderResultStore-->>loaderPlugin: return loader promise
  loaderPlugin->>Activity: render with LoaderResultContext.Provider
  useLoaderData->>Activity: read LoaderResultContext
  Activity-->>useLoaderData: provide loader promise
Loading

Possibly related PRs

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/fep-2613-loader-result-reference

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.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 30, 2026

Copy link
Copy Markdown

Deploying stackflow-demo with  Cloudflare Pages  Cloudflare Pages

Latest commit: 0c56baa
Status: ✅  Deploy successful!
Preview URL: https://d0aca274.stackflow-demo.pages.dev
Branch Preview URL: https://feature-fep-2613-loader-resu.stackflow-demo.pages.dev

View logs

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 30, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
stackflow-docs 0c56baa Commit Preview URL Jul 30 2026, 08:07 AM

@changeset-bot

changeset-bot Bot commented Jul 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 0c56baa

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

This PR includes changesets to release 1 package
Name Type
@stackflow/react 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

@pkg-pr-new

pkg-pr-new Bot commented Jul 30, 2026

Copy link
Copy Markdown
@stackflow/link

yarn add https://pkg.pr.new/@stackflow/link@741.tgz

@stackflow/plugin-basic-ui

yarn add https://pkg.pr.new/@stackflow/plugin-basic-ui@741.tgz

@stackflow/plugin-blocker

yarn add https://pkg.pr.new/@stackflow/plugin-blocker@741.tgz

@stackflow/plugin-google-analytics-4

yarn add https://pkg.pr.new/@stackflow/plugin-google-analytics-4@741.tgz

@stackflow/plugin-history-sync

yarn add https://pkg.pr.new/@stackflow/plugin-history-sync@741.tgz

@stackflow/plugin-lifecycle

yarn add https://pkg.pr.new/@stackflow/plugin-lifecycle@741.tgz

@stackflow/plugin-renderer-basic

yarn add https://pkg.pr.new/@stackflow/plugin-renderer-basic@741.tgz

@stackflow/plugin-renderer-web

yarn add https://pkg.pr.new/@stackflow/plugin-renderer-web@741.tgz

@stackflow/react-ui-core

yarn add https://pkg.pr.new/@stackflow/react-ui-core@741.tgz

@stackflow/react

yarn add https://pkg.pr.new/@stackflow/react@741.tgz

commit: 0c56baa

@ENvironmentSet
ENvironmentSet marked this pull request as ready for review July 30, 2026 08:59
@ENvironmentSet
ENvironmentSet merged commit aa6aa1d into main Jul 30, 2026
9 checks passed
@ENvironmentSet
ENvironmentSet deleted the feature/fep-2613-loader-result-reference branch July 30, 2026 08:59
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