logo
  • Guide
  • Config
  • Plugin
  • API
  • Examples
  • Community
  • Modern.js 2.x Docs
  • English
    • 简体中文
    • English
    • Commands
      File Conventions
      src/
      App.[tj]sx
      entry.[tj]s
      entry.server.[tj]sx
      modern.runtime.[tj]s
      routes/
      *.[server|node].[tj]sx
      api/
      lambda/*.[tj]s
      server/
      modern.server.[tj]s
      shared/
      config/
      html/
      favicon.*
      icon.*
      mock/
      public/
      upload/
      modern.config.[tj]s
      Runtime
      Core
      createRoot
      render
      Router
      router
      SSR
      NoSSR
      renderStreaming
      renderString
      createRequestHandler
      BFF
      useHonoContext
      Utility
      CSS-In-JS API
      Head
      loadable
      📝 Edit this page
      Previous pagemodern.runtime.[tj]sNext page*.[server|node].[tj]sx

      #routes/

      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:

      .
      └── routes
          ├── layout.tsx
          ├── page.tsx
          └── user
              ├── layout.tsx
              └── page.tsx

      #Basic Example

      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:

      .
      └── routes
          ├── page.tsx
          └── user
              └── page.tsx

      will generate two routes:

      • /
      • /user

      #Dynamic Routing

      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:

      └── routes
          ├── [id]
          │   └── page.tsx
          ├── blog
          │   └── page.tsx
          └── page.tsx

      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.

      #Layout Component

      In the following example, a common layout component can be added to all route components by adding layout.tsx:

      .
      └── routes
          ├── layout.tsx
          ├── page.tsx
          └── user
              ├── layout.tsx
              └── page.tsx

      In the layout component, you can use <Outlet> to represent the child components:

      routes/layout.tsx
      import { Link, Outlet, useLoaderData } from '@modern-js/runtime/router';
      
      export default () => {
        return (
          <>
            <Outlet></Outlet>
          </>
        );
      };
      Note

      <Outlet> is a new API in React Router 7. For details, see Outlet.