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
  • Goal : Illustrate how to use useState by creating RandomQuote App
  • 1. Set up a new React project
  • 2. Structure the components
  • 3. Implement the components
  • 4. Test the App
  • 5. Optional Enhancements
  1. React State and Styling

Lesson 3 - RandomQuote App

PreviousLesson 2 - Overview of How State Works in ReactNextLesson 4 - Lifting State Up - React Pattern Overview

Last updated 5 months ago

Goal : Illustrate how to use useState by creating RandomQuote App

1. Set up a new React project

  1. Create the project: Run the following command in your terminal:

    npx create-react-app random-quote-app
    cd random-quote-app
  2. Install Bootstrap: Install Bootstrap for styling:

    npm install bootstrap

    Import Bootstrap CSS in your index.js:

    import 'bootstrap/dist/css/bootstrap.min.css';

2. Structure the components

  • In src folder- App.jsx (Parent Component): Manages the state and passes props to RandomQuote.

  • In src/components folder - RandomQuote.jsx (Child Component): Displays the quote and handles button clicks.


3. Implement the components

App.jsx

  • Initializes state with a default quote.

  • Defines an array of quotes.

  • Creates a getRandomQuote function to generate a random index and update the quote state.

  • Renders the RandomQuote component, passing the quote and getRandomQuote function as props.

  • use two useState for updating the state of current quote and text color:

import React, { useState } from 'react';
import RandomQuote from './RandomQuote';

const quotes = [
  { author: "Albert Einstein", content: "Life is like riding a bicycle. To keep your balance you must keep moving." },
  { author: "Maya Angelou", content: "You will face many defeats in life, but never let yourself be defeated." },
  { author: "Oscar Wilde", content: "Be yourself; everyone else is already taken." },
  { author: "Mark Twain", content: "The secret of getting ahead is getting started." },
  {author: "Dennis Prager", content:"Goodness is about character - integrity, honesty, kindness, generosity, moral courage, and the like. More than anything else, it is about how we treat other people." },
];

function App() {
  const [quote, setQuote] = useState(quotes[0]);
  const [color, setColor] = useState('#17a2b8');

  const getRandomQuote = () => {
    const randomIndex = Math.floor(Math.random() * quotes.length);
    const randomColor = `#${Math.floor(Math.random() * 16777215).toString(16)}`;
    setQuote(quotes[randomIndex]);
    setColor(randomColor);
  };

  return (
    <div className="d-flex flex-column align-items-center justify-content-center vh-100" style={{ backgroundColor: color, color: 'white' }}>
      <RandomQuote
        quote={quote}
        color={color}
        onChangeQuote={getRandomQuote}
      />
    </div>
  );
}

export default App;

Key Points

  • The useState hook is used to manage the current quote.

  • Props (quote, color and onChangeQuote) are passed from the parent component to the child component.

  • The getRandomQuote prop is used to update the state in the parent component.

  • Bootstrap is used for basic styling (you can customize it further).


RandomQuote.jsx

  • Receives quote, color and onChangeQuote as props.

  • Displays the quote within a Bootstrap card.

  • Renders a button that, when clicked, triggers the onChangeQuote function passed from the parent component.

import React from 'react';

function RandomQuote({ quote, color, onChangeQuote }) {
  return (
    <div className="p-4 bg-white rounded shadow text-center" style={{ color: color }}>
      <p className="mb-3" style={{ fontSize: '1.5rem' }}>"{quote.content}"</p>
      <p className="mb-4 fw-bold fst-italic">- {quote.author}</p>
      <button className="btn btn-primary" onClick={onChangeQuote}>
        Get New Quote
      </button>
    </div>
  );
}

export default RandomQuote;


4. Test the App

  1. Start the development server:

    npm run dev
  2. Open the browser and view your app. When you click the "Get New Quote" button, a random quote with a new background color will appear.


5. Optional Enhancements

  • Add animations: Use CSS or libraries like react-transition-group to add fade effects when changing quotes.

  • Persist state: Use localStorage to remember the last quote displayed.

  • API Integration: Replace the static array with an API call to fetch quotes dynamically.

This structure provides a reusable child component and showcases the flow of data between the parent and child using props and state.