Used
How toAccess React Router's Loaders Data in entry.client
If you need to run some code in app/entry.client.tsx before hydrating your React Router application, you can leverage the global window.__reactRouterContext object to access the data.
First return the data you need from a route loader, e.g from app/root.tsx.
export async function loader() {
let env = { GA_ID: process.env.GA_ID! };
return data({ env })
}
// more code
Then in your entry.client you can access it.
import { HydratedRouter } from "react-router";
import { startTransition, StrictMode } from "react";
import { hydrateRoot } from "react-dom/client";
const { GA_ID } = window.__reactRouterContext.state.loaderData.root.env;
// use value here
startTransition(() => {
hydrateRoot(
document,
<StrictMode>
<HydratedRouter />
</StrictMode>
);
});