ReactJS-The Beginner Master Class
  • React In the Beginning
    • Lesson 1 - Demo: Build a Simple React App - Fast
    • Lesson 2 - HTML Review
    • Lesson 3 - CSS Review
    • Lesson 4 - Modern JavaScript (JSX) Patterns
    • Lesson 5 - Set up Dev Environment
    • Hands-on Practice
  • React Fundamentals
    • Lesson 1 - Understanding Old vs New Way of Building Web Apps - SPAs
    • Lesson 2 - Motivation for Using React as the Solution to Vanilla JS
    • Lesson 3 - What is ReactJS - How it Works
    • React Code Along from Scratch
    • Lesson 4 - Create and Run a React Project with Vite - Full Overview
    • Lesson 5 - Create Hook by State Management in React
    • Lesson 6 - React Project File and Folder Walkthrough
    • Lesson 7 - JSX and How React Treats the DOM & JSX Compilation(by Babeljs) - Overview
    • Lesson 8 - Understanding the Main Files - App.jsx and main.jsx
    • Lesson 9 - Props and One-Way Data Flow - Overview
    • Lesson 10 - Google Bookshelf App - Ver 1.0
    • Hands-on Practice I
    • Hands-on Practice II
  • React State and Styling
    • Lesson 1 - Pulling Book Data from a Different Data File
    • Lesson 2 - Overview of How State Works in React
    • Lesson 3 - RandomQuote App
    • Lesson 4 - Lifting State Up - React Pattern Overview
    • Hands-On - Simple Counter
  • Forms and Interactivity - Grocery List App
    • Lesson 1 - Setup a Simple Form and Input
    • Lesson 2 - Build Form Profile App Using Multi-input Form Data
    • Hands-on : Build a Grocery List App
  • Connecting to the Backend - Consuming APIs - UseEffect Hook
    • Lesson 1 - Connecting to the Back End - Understanding Side Effects, Hooks and useEffect - Overview
    • Lesson 2 - Fetching Data from the Backend the Right Way with useEffect Hook
    • Lesson 3 - Setting Up Loading State
    • Hands-on :Use Dependency Array and Adding Values that Control Side Effects
  • Solo Project 1
  • RESTful APIs :Build a BookSearch App -Ver 2.0
    • Lesson 1: Build and test RESTful APIs with Postman
    • Lesson 2 - BookShelf App Structure
    • Lesson 3 - Create NavBar.jsx Component
    • Lesson 4 - Create Footer Component
    • Lesson 5 - Create BookList.jsx Component
    • Lesson 6 - Create BookCard.jsx Component
    • Lesson 7 - Creating Custom Hooks - useBooks and api-client
    • Lesson 8 - Controlling Network Activities in React with AbortController
    • Lesson 9 - Show Book Details in a Modal - Working
    • Lesson 10 - Bookshelf App Summary
  • Multi-Page Applications (MPAs)
    • Build a Multi-Page React Application
    • Multi-Page React Application
    • Hands-on Practice
  • Backend Frameworks-NEXT.JS
    • Migrating from React to Next.js
    • Lesson 1: Key Concepts of NodeJS and Express for Backend Web Development
    • Lesson 2: How to set up a new Next.js project
    • Lesson 3: How to create Layouts and Pages
    • Hands-on Practice 1
    • Hands on Practice 2
      • New Project & Folder Structure
      • File-Based Routing
      • Server vs Client Components & Router Hooks
      • Start On The Navbar
      • Navbar Links, Dropdowns & React Icons
      • Active Links & Conditional Rendering
      • Homepage Components
      • Properties Page
      • Property Card Dynamic Data
      • Home Property Listings
      • Custom Not Found & Loading Pages
  • Git and GitHubs
    • Git Installation
    • Git Commands
    • GitHub Repository
    • Hands-on Practice
  • Database in Application
    • React Supabase CRUD
    • Hands-on: Note Taking App
  • NoSQL Database
    • Installing MongoDB Community Edition
    • System Env Path Setting
    • How to use MongoDB Shell
    • How to Connect and Use Mongosh in VS Code via MongoDB Extension
    • MongoDB Guide
  • Solo Project 2
  • Deployment and Web Hosting
    • Lesson 1. React+Vite+TS+Shadcn Project
    • Lesson 2. Deploying a React Vite App to Vercel from Vercel CLI
    • Lesson 3 Connecting to GitHub Repo and Automate Deployment
  • Solo Project 3
  • Final Term Project
    • Level 1 Team Project
    • Level 1 Team Project
    • Level 1 Team Project
    • Level 1 Team Project
    • Level 2 Team Project
    • Level 2 Team Project
    • Level 3 Team Project
    • Level 3 Team Project
Powered by GitBook
On this page
  • File-Based Routing
  • 1. Understanding the File-Based Routing Concept
  • 2. Creating Basic Routes
  • 3. Building Nested Routes
  • 4. Implementing Dynamic Routes-[slug] or [id]
  • 5. Navigating Between Routes
  • 6. Recap and Best Practices
  1. Backend Frameworks-NEXT.JS
  2. Hands on Practice 2

File-Based Routing

PreviousNew Project & Folder StructureNextServer vs Client Components & Router Hooks

Last updated 2 months ago

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.

// app/layout.jsx

export const metadata = {
  title: "Create Next App",
  description: "Generated by create next app",
};

export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body>
        {children}
      </body>
    </html>
  );
}

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:

      export default function HomePage() {
        return (
          <div>
            <h1>Welcome to Property Shop</h1>
            <p>This is the home page.</p>
          </div>
        );
      }

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:

      export default function PropertiesPage() {
        return (
          <div>
            <h1 className='text-3xl' >Properties</h1>
            <Link href='/properties'> List of properties will appear here.</Link>
          </div>
        );
      }

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:

      export default function PropertyAddPage() {
        return (
          <div>
            <h1>Add a New Property</h1>
            <p>Form to add a new property will go here.</p>
          </div>
        );
      }

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:

      //app/properties/[id]/page.jsx
      'use client'
      import { useParams } from 'next/navigation';
      
      export default function PropertyPage() {
        const params = useParams();
        const { id } = params;
      
        return (
          <div>
            <h1>Property Details</h1>
            <p>Displaying details for property ID: {id}</p>
          </div>
        );
      }

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

a. Using the Next.js <Link> Component

  1. Import Link from next/link:

    import Link from 'next/link';
  2. Replace traditional <a> tags with <Link> for client-side navigation:

    • Example in your home page:

      import Link from 'next/link'
      export default function HomePage() {
        return (
          <div>
            <h1>Welcome to Property Shop</h1>
            <p>Click below to view properties:</p>
            <Link href="/properties">
              Show Properties
            </Link>
          </div>
        );
      }
  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.