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
  • Custom Not Found & Loading Pages
  • 1. Create a Custom Not Found Page
  • 2. Create a Custom Loading Page
  • 3. Testing and Verification
  • Recap
  1. Backend Frameworks-NEXT.JS
  2. Hands on Practice 2

Custom Not Found & Loading Pages

Custom Not Found & Loading Pages

1. Create a Custom Not Found Page

a. Create the File in the App Folder

  • Location: In the root app/ directory, create a file named not-found.jsx.

  • Purpose: Next.js automatically uses this file to render a custom 404 page when a route isn’t found.

b. Build the React Component

  1. Start the Component:

    • Open not-found.jsx and set up a functional React component.

    • Example:

      export default function NotFound() {
        return (
          <div>
            {/* Custom Not Found content will go here */}
          </div>
        );
      }
  2. Copy and Adapt the Markup:

    • Open your provided not-found.html file and copy the section below the navigation that includes the not-found message, icon, and home button.

    • Paste this markup into your component’s return statement.

    • Important: Replace all HTML attributes with JSX equivalents:

      • Change class to className.

      • Change any self-closing tags as needed.

  3. Integrate React Icons:

    • Instead of using an <i> tag from a CDN, import the icon from react-icons.

    • For example, if you want to use an exclamation triangle icon:

      jsxCopyimport { FaExclamationTriangle } from 'react-icons/fa';
    • Replace the existing <i> tag with:

      <FaExclamationTriangle className="fa-5x text-8xl text-yellow-400" />
  4. Use Next.js Link for Navigation:

    • Import the Link component from Next.js:

      import Link from 'next/link';
    • Change the "Go Home" anchor tag to a <Link> component that routes to the home page:

      <Link href="/">
        <a className="bg-blue-700 hover:bg-blue-800 text-white font-bold py-4 px-6 rounded">
          Go Home
        </a>
      </Link>
  5. Final NotFound Component Example:

    //app/not-found.jsx
    import Link from 'next/link';
    import { FaExclamationTriangle } from 'react-icons/fa';
    
    export default function NotFoundPage() {
      return (
        <section className="bg-blue-50 min-h-screen flex-grow">
          <div className="container m-auto max-w-2xl py-24">
            <div className="bg-white px-6 py-24 mb-4 shadow-md rounded-md border m-4 md:m-0">
              <div className="flex justify-center">
                <FaExclamationTriangle className="fa-5x text-8xl text-yellow-400" />
              </div>
              <div className="text-center">
                <h1 className="text-3xl font-bold mt-8 mb-2">Page Not Found</h1>
                <p className="text-gray-500 text-xl m-10">
                  The page you are looking for does not exist.
                </p>
                <Link href="/" className="bg-blue-700 hover:bg-blue-800 text-white font-bold py-4 px-6 rounded">
                    Go Home
                  
                </Link>
              </div>
            </div>
          </div>
          <div className="flex-grow"></div>
        </section>
      );
    }

2. Create a Custom Loading Page

a. Create the File in the App Folder

  • Location: In the app/ directory, create a file named loading.jsx.

  • Purpose: Next.js uses this file to render a loading indicator during page transitions or data fetching.

b. Build the React Component

  1. Mark the Component as Client-Side:

    • Since you’ll use client-side hooks or components (like a spinner), add "use client"; at the top.

      "use client";
  2. Install React Spinners:

    • Open your terminal and install the react-spinners package:

      npm install react-spinners
  3. Import and Use a Spinner:

    • Import a spinner component (e.g., ClipLoader) from react-spinners:

      import ClipLoader from 'react-spinners/ClipLoader';
    • In your component, return the spinner. Optionally, you can customize its color, size, and CSS override.

      'use client'
      
      import ClipLoader from 'react-spinners/ClipLoader'
      
      export default function Loading({loading}) {
        const override = {
          display: 'block',
          margin: '100px auto',
        }
      
        return (
          <div className="flex justify-center items-center min-h-screen">
            <ClipLoader 
            color="#3B82F6" 
            size={150} 
            loading={loading} 
            cssOverride={override}
            aria-label="Loading Spinner"
            />
          </div>
        )
      }

3. Testing and Verification

a. Run the Application

  • Start your development server:

    npm run dev

b. Test the Custom Pages

  • Not Found Page: Navigate to a non-existent route (e.g., http://localhost:3000/test). You should see your custom 404 page.

  • Loading Page: Navigate between pages (for example, from Home to Properties). If the transition takes a moment, your custom loading spinner should appear.


Recap

  1. Custom Not Found Page:

    • Create not-found.jsx in the app folder.

    • Paste and convert HTML markup from your provided not-found.html.

    • Replace HTML elements with JSX (e.g., className), integrate React icons, and use Next.js Link for navigation.

  2. Custom Loading Page:

    • Create loading.jsx in the app folder.

    • Mark it as a client component using "use client";.

    • Install and import react-spinners to display a loading spinner.

    • Return the spinner with custom styling for a seamless loading experience.

PreviousHome Property ListingsNextGit and GitHubs

Last updated 2 months ago