-
-
Notifications
You must be signed in to change notification settings - Fork 10.6k
feat(dev): expose setReactRouterDevLoadContext
#13326
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: dev
Are you sure you want to change the base?
feat(dev): expose setReactRouterDevLoadContext
#13326
Conversation
|
Hi @albertusdev, Welcome, and thank you for contributing to React Router! Before we consider your pull request, we ask that you sign our Contributor License Agreement (CLA). We require this only once. You may review the CLA and sign it by adding your name to contributors.yml. Once the CLA is signed, the If you have already signed the CLA and received this response in error, or if you have any questions, please contact us at hello@remix.run. Thanks! - The Remix team |
Thank you for signing the Contributor License Agreement. Let's get this merged! 🥳 |
hi @brophdawg11! sorry for the tag here, not sure which contributors should I ping to get this small PR reviewed. appreciate your help here! |
setReactRouterDevLoadContext
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
Thanks for the PR! One concern I have with the approach in this PR is it assumes the server is running in the same environment as Vite, but with our newly added support for the Vite Environment API, this is no longer guaranteed. For example, when using Any API for make setting a load context easier would probably work better a file to be configured in your React Router config, e.g. We'd still need to discuss whether this is something we want to support, so could you help us by providing a bit more detail about your use case? |
@markdalgleish sorry for the late reply! thank you for raising this point. You are right. My use case here is to make it so easy to make setting a load context much much easier and consistent when running react-router codebase in a local development environment by reusing the When I raised this PR a month ago or so Cloudflare hasn't released their Vite plugin yet in GA, and I was trying to deploy a Since then, I gave up on deploying it to Vercel and because I saw that Cloudflare just released the official Vite plugin + support for react-router, I decided to switch to Cloudflare Workers instead. Thanks to Wrangler + Miniflare which provides a consistent local development environment, this was no longer an issue for me when I knew that we could modify the import type { ExportedHandler, ExportedHandlerFetchHandler } from '@cloudflare/workers-types'
import { createRequestHandler } from 'react-router'
import { getLoadContext } from '../load-context'
type Env = Record<string, string>
const onRequest = createRequestHandler(
() => import('virtual:react-router/server-build'),
import.meta.env.MODE
)
export default {
async fetch(request, env, ctx) {
return onRequest(request as unknown as Request, {
cloudflare: { env, ctx },
...getLoadContext({
request: request as unknown as Request,
context: { cloudflare: { env, ctx } },
}),
}) as unknown as ReturnType<ExportedHandlerFetchHandler<Env>>
},
} satisfies ExportedHandler<Env> This setup works like a charm for my usecase, albeit the documentation was not obvious and it took me some time to figure this out. +I really like your suggestion to probably expose a |
Purpose
This PR exposes the
setReactRouterDevLoadContext
function from the vite plugin, allowing developers to easily set a custom load context for the dev server without requiring a custom server entrypoint.Problem
Currently, to provide a custom "load context" for server-side loaders and actions during development, developers must either:
Both approaches require additional configuration and setup just to supply environment variables or other data to loaders and actions during development.
Solution
By exposing the existing
setReactRouterDevLoadContext
function, developers can achieve the same result with a much simpler approach: