Render the UI for the given DataRouter. This component should
typically be at the top of an app's element tree.
import { createBrowserRouter } from "react-router";
import { RouterProvider } from "react-router/dom";
import { createRoot } from "react-dom/client";
const router = createBrowserRouter(routes);
createRoot(document.getElementById("root")).render(
<RouterProvider router={router} />
);
react-router and react-router/dom with the only difference being that the
latter automatically wires up react-dom's flushSync
implementation. You almost always want to use the version from
react-router/dom unless you're running in a non-DOM environment.
function RouterProvider({
router,
flushSync: reactDomFlushSyncImpl,
unstable_onError,
unstable_useTransitions,
}: RouterProviderProps): React.ReactElement
The ReactDOM.flushSync
implementation to use for flushing updates.
You usually don't have to worry about this:
RouterProvider exported from react-router/dom handles this internally for youRouterProvider from react-router and ignore this propAn error handler function that will be called for any loader/action/render
errors that are encountered in your application. This is useful for
logging or reporting errors instead of the ErrorBoundary because it's not
subject to re-rendering and will only run one time per error.
The errorInfo parameter is passed along from
componentDidCatch
and is only present for render errors.
<RouterProvider unstable_onError=(error, errorInfo) => {
console.error(error, errorInfo);
reportToErrorService(error, errorInfo);
}} />
The DataRouter instance to use for navigation and data fetching.
Control whether router state updates are internally wrapped in
React.startTransition.
undefined, all state updates are wrapped in
React.startTransition
startTransition.true, Link and Form navigations will be wrapped
in React.startTransition and router state changes will be wrapped in
React.startTransition and also sent through
useOptimistic to
surface mid-navigation router state changes to the UI.false, the router will not leverage React.startTransition or
React.useOptimistic on any navigations or state changes.For more information, please see the docs.