File-Based Routing

File-Based Routing

1. Understanding the File-Based Routing Concept

  • File-Based Routing Overview: In Next.js (using the new app folder), every folder and file corresponds to a route. Instead of manually configuring routes (as in traditional single page applications), you simply create folders and files:

    • A folder inside app/ represents a route segment.

    • A file named page.js (or page.jsx) inside a folder renders the content for that route.

  • Routing Benefits:

    • No need for extra libraries: You don’t need React Router or similar tools.

    • Intuitive and Scalable: Adding nested or dynamic routes is as simple as creating subfolders.


2. Creating Basic Routes

a. Home Page Route

  1. Navigate to your project’s root folder (e.g., open property-shop-next-app in your code editor).

  2. Inside the app/ folder, create a file named page.jsx if it isn’t already present.

    • This file represents your home route (/).

    • Add a simple component:

b. Creating a New Route (e.g., /properties)

  1. Inside the app/ folder, create a new folder called properties.

  2. Within the properties folder, create a file named page.jsx.

    • This file will render when you visit /properties.

    • Example component:


3. Building Nested Routes

a. Nested Route for Adding a Property (/properties/add)

  1. Inside the properties folder, create a subfolder named add.

  2. Within the add folder, create a file called page.jsx.

    • This page renders at the route /properties/add.

    • Example:


4. Implementing Dynamic Routes-[slug] or [id]

a. Creating a Dynamic Route for a Single Property (/properties/[id])

  1. Inside the properties folder, create a folder for the dynamic segment.

    • Name it [id] (using square brackets tells Next.js that this part is dynamic).

  2. Within the [id] folder, create a file named page.jsx.

    • This file will handle any route matching /properties/some-id.

    • Example component:

b. (Optional) Creating a Catch-All Route

  • Purpose: To capture additional sub-paths beyond the dynamic parameter.

  • Implementation: Rename the folder from [id] to [...id].

    • This allows any route matching /properties/anything/here to be handled by the same component.

  • Note: Use catch-all routes only when you need to handle nested dynamic segments.


5. Navigating Between Routes

  1. Import Link from next/link:

  2. Replace traditional <a> tags with <Link> for client-side navigation:

    • Example in your home page:

  3. Benefit: Using <Link> improves performance by preventing full page reloads and enabling smooth client-side transitions.


6. Recap and Best Practices

  • File-Based Routing:

    • Every folder in the app/ directory corresponds to a URL segment.

    • Naming a file page.jsx automatically makes it a routable page.

  • Nested and Dynamic Routes:

    • Create nested folders to represent sub-routes (e.g., /properties/add).

    • Use square brackets (e.g., [id]) for dynamic parameters.

    • Optionally, use [...id] for catch-all dynamic routes.

  • Client-Side Navigation:

    • Always use the <Link> component from Next.js for smoother navigation between pages.

Last updated