<StaticRouterProvider>A <StaticRouterProvider> accepts a router from createStaticRouter() and a context from createStaticHandler() and renders your application on the server (i.e., Node or another Javascript runtime). For a more complete overview, please refer to the Server-Side Rendering guide.
import {
  createStaticHandler,
  createStaticRouter,
  StaticRouterProvider,
} from "react-router-dom/server";
import Root, {
  loader as rootLoader,
  ErrorBoundary as RootBoundary,
} from "./root";
const routes = [
  {
    path: "/",
    loader: rootLoader,
    Component: Root,
    ErrorBoundary: RootBoundary,
  },
];
export async function renderHtml(req) {
  let { query, dataRoutes } = createStaticHandler(routes);
  let fetchRequest = createFetchRequest(req);
  let context = await query(fetchRequest);
  // If we got a redirect response, short circuit and let our Express server
  // handle that directly
  if (context instanceof Response) {
    throw context;
  }
  let router = createStaticRouter(dataRoutes, context);
  return ReactDOMServer.renderToString(
    <React.StrictMode>
      <StaticRouterProvider
        router={router}
        context={context}
      />
    </React.StrictMode>
  );
}
declare function StaticRouterProvider(props: {
  context: StaticHandlerContext;
  router: Router;
  hydrate?: boolean;
  nonce?: string;
}: JSX.Element;
contextThis is the context returned from the createStaticHandler().query() calls which contains all of the fetched data for the request.
routerThis is the router created via createStaticRouter
hydrateBy default, <StaticRouterProvider> will stringify the required hydration data onto window.__staticRouterHydrationData in a <script> tag which will be read and automatically hydrated by createBrowserRouter().
If you wish to do more advanced hydration manually, you can pass hydrate={false} to disable this automatic hydration. Client-side, you would then pass your own hydrationData to createBrowserRouter.
nonceWhen leveraging automatic hydration, you may provide a nonce value to be rendered onto the <script> tag and used along with your Content Security Policy.
See also: