createbrowserrouter in react
createBrowserRouterin React Router (v6.4+) creates a router using a data-driven approach (array of route objects) instead of JSX, enabling powerful features like data loading (loaders) and mutations (actions), and is the recommended modern way for web apps by managing history via the HTML5 History API for clean URLs. You define routes as objects with path and element (or children) and pass them to createBrowserRouter, then wrap your app with the RouterProvider component.
How to Use
createBrowserRouter- Install React Router:
bash
-
npm install react-router-dom # or yarn add react-router-dom - Define Your Routes (e.g., in
router.jsorindex.js):javascript -
import { createBrowserRouter } from 'react-router-dom'; import Root from './routes/Root'; // Your main layout component import Home from './routes/Home'; import About from './routes/About'; import ErrorPage from './routes/ErrorPage'; const router = createBrowserRouter([ { path: "/", element: <Root />, errorElement: <ErrorPage />, children: [ // Nested routes { index: true, element: <Home /> }, // Renders <Home> at '/' { path: "about", element: <About /> }, { path: "users/:userId", element: <UserProfile /> }, // Dynamic route ], }, ]); export default router;path: The URL segment.index: trueis for the default child route.element: The component to render for that path.children: For nested routes, uses<Outlet />in the parent.
- Provide the Router (in
index.jsorApp.js):javascript
import React from 'react';
import ReactDOM from 'react-dom/client';
import { RouterProvider } from 'react-router-dom';
import router from './router'; // Your router config
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<RouterProvider router={router} />
</React.StrictMode>,
);
Key Advantages (vs.
<BrowserRouter>/JSX Routes)- Data Layer: Supports
loaderfunctions for fetching data before rendering, ensuring components get data immediately. - Data Mutations: Supports
actionfunctions for POST/PUT/DELETE requests, improving data flow. - Flexibility: Configure routes as JS objects (data) instead of JSX, separating concerns.
- Future-Proof: Recommended by React Router as the modern direction