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
  • Home Property Listings
  • 1. Create a Dedicated Component for Home Page Listings
  • 2. Integrate the HomeProperties Component into the Home Page
  • 3. Testing and Refinements
  • Recap
  1. Backend Frameworks-NEXT.JS
  2. Hands on Practice 2

Home Property Listings

Home Property Listings

1. Create a Dedicated Component for Home Page Listings

a. Set Up the Component File

  • Location: In your components/ folder, create a new file named HomeProperties.jsx.

  • Purpose: This component will handle displaying a subset of property cards on the home page.

b. Import Required Modules and Data

  • Import React, the property JSON data, and the PropertyCard component (which you created earlier):

    "use client";
    import PropertyCard from '@/components/PropertyCard';
    import properties from '@/properties.json'; // Adjust path if needed
    import Link from 'next/link';

c. Randomize and Select Recent Listings

  • Inside the component, use JavaScript to randomize the properties array and select only three listings:

    //components/HomeProperties.jsx
    import properties from '@/properties.json'
    import PropertyCard from './PropertyCard'
    import Link from 'next/link'
    
    const HomeProperties = () => {
      // Randomize the array using sort with Math.random, then select the first three properties
      const recentProperties = properties
        .sort(() => Math.random() - Math.random())
        .slice(0, 3)
    
      return (
        // <!-- Recent Properties -->
        <section className="px-4 py-6">
          <div className="container-xl lg:container m-auto">
            <h2 className="text-3xl font-bold text-blue-500 mb-6 text-center">
              Recent Properties
            </h2>
            <div className="">
              {recentProperties.length === 0 ? (
                <p className="text-center">No properties found.</p>
              ) : (
                <div className="grid grid-cols-1 md:grid-cols-3 gap-6">
                  {recentProperties.map((property) => (
                    <PropertyCard key={property._id} property={property} />
                  ))}
                </div>
              )}
            </div>
          </div>
    
          {/* Button to view all properties */}
          <div className="mt-10 flex justify-center">
            <Link
              href="/properties"
              className="bg-black text-white text-center py-4 px-6 rounded-xl hover:bg-gray-700">
              View All Properties
            </Link>
          </div>
        </section>
      )
    }
    export default HomeProperties

2. Integrate the HomeProperties Component into the Home Page

a. Open Your Home Page File

  • Location: In the app/ folder, open page.jsx (this is your home page component).

b. Import and Insert the Component

  • At the top of page.jsx, import the HomeProperties component:

    jsxCopyimport HomeProperties from '../components/HomeProperties';
  • Insert <HomeProperties /> into the home page's JSX where you want the property listings to appear. For example, below other home page content or info boxes:

    jsxCopyexport default function HomePage() {
      return (
        <main>
          {/* Other homepage sections (hero, info boxes, etc.) */}
          <Hero />
          <InfoBoxes />
          <HomeProperties />
          <Footer />
        </main>
      );
    }

3. Testing and Refinements

a. Run the Development Server

  • Start your Next.js app with:

    bashCopynpm run dev
  • Navigate to http://localhost:3000 and verify that:

    • The home page displays the heading for recent properties.

    • Three randomized property cards are rendered using dynamic data from properties.json.

    • The "View All Properties" button is visible and properly routes to /properties.

b. Adjust and Refine

  • Styling: Tweak Tailwind CSS classes in HomeProperties.jsx (and in your PropertyCard component) to match your design.

  • Responsiveness: Verify that the grid layout adapts well on different screen sizes (e.g., one column on mobile, two columns on larger screens).

  • Data Integrity: Ensure that the JSON data is correctly parsed and that the image paths correctly point to files in your public folder.


Recap

  1. Component Creation:

    • Created a dedicated HomeProperties.jsx component in the components/ folder.

  2. Data Handling:

    • Imported property data from properties.json, randomized the array, and selected three listings.

  3. Dynamic Rendering:

    • Mapped over the selected listings to render dynamic PropertyCard components.

  4. Integration:

    • Inserted the HomeProperties component into the home page (app/page.jsx).

  5. Testing:

    • Verified the feature with a live development server and refined CSS as needed.

PreviousProperty Card Dynamic DataNextCustom Not Found & Loading Pages

Last updated 2 months ago