The identifier for the entry point when the application uses Conventional Routing.
Conventional routing uses routes/
as the convention for the entry point and analyzes the files in the src/routes
directory to obtain the client-side routing configuration.
Any layout.[tj]sx
and page.[tj]sx
under src/routes
will be used as the application's routes:
The directory name under routes
will be used as the mapping of the route URL. layout.tsx
is used as the layout component and page.tsx
is used as the content component in the routing. They are the leaf nodes of the entire route. For example, the following directory structure:
will generate two routes:
/
/user
If the directory name of the route file is named with []
, the generated route will be used as a dynamic route. For example, the following file directory:
The routes/[id]/page.tsx
file will be converted to the /:id
route. Except for the /blog
route that can be matched exactly, all other /xxx
routes will be matched to this route.
In the component, you can use useParams to obtain the corresponding named parameter.
When using the loader function to obtain data, params
will be passed as an input parameter to the loader
function, and the corresponding parameter can be obtained through the attribute of params
.
In the following example, a common layout component can be added to all route components by adding layout.tsx
:
In the layout component, you can use <Outlet>
to represent the child components:
<Outlet>
is a new API in React Router 6. For details, see Outlet.
React Router v7 reduces bundle size (approximately 15% smaller) compared to React Router v6, provides a more efficient route matching algorithm, and offers better support for React 19 and TypeScript. There are very few breaking changes compared to React Router v6, and Modern.js has made both versions compatible, allowing for a seamless upgrade by simply installing and registering the appropriate plugin.
For more changes from React Router v6 to React Router v7, check the documentation
React Router v7 has certain environment requirements:
First, install the Modern.js React Router v7 plugin:
Register the plugin in modern.config.ts
:
In React Router v7, you no longer need to use the defer
API; you can directly return data in the data loader:
React Router v7 has also deprecated the json
API: