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
  • Lifting State Up
  • Example: Random Quote Generator
  1. React State and Styling

Lesson 4 - Lifting State Up - React Pattern Overview

PreviousLesson 3 - RandomQuote AppNextHands-On - Simple Counter

Last updated 5 months ago

Lifting State Up

  • Concept: Lifting state up refers to the practice of moving state from a child component to a shared parent component. This is done when multiple child components need to access and potentially modify the same piece of data.

  • Why Lift State Up?

    • Share State Between Components: When multiple child components need to access and potentially modify the same data, lifting the state to their common parent allows for efficient data management and synchronization.

    • Minimize Prop Drilling: Prop drilling occurs when data is passed down through a chain of components, even if not all components in the chain need that data. Lifting state up to a common ancestor can significantly reduce the number of props that need to be passed down, making the component hierarchy cleaner and easier to maintain.

    • Improve Data Consistency: When state is managed in a single location, it ensures that all child components using that data have access to the most up-to-date version. This helps maintain data consistency across the application.

    • Facilitate Component Reusability: If multiple components need to share the same state, lifting the state up makes those components more reusable in other parts of the application.

Example: Random Quote Generator

Let's consider a simplified example of a Random Quote Generator.

  • Without Lifting State Up (Incorrect Approach)

JavaScript

// RandomQuote.jsx
function RandomQuote() {
  const [quote, setQuote] = useState(''); 
  // State is managed within the RandomQuote component

  // ... (rest of the component)
}

In this scenario, each RandomQuote component would have its own independent quote state. This would lead to inconsistencies if you wanted to display the same quote across multiple instances of the RandomQuote component.

  • With Lifting State Up (Correct Approach)

JavaScript

// App.jsx
function App() {
  const [quote, setQuote] = useState(''); 

  return (
    <div>
      <RandomQuote quote={quote} onGetQuote={() => setQuote(getRandomQuote())} /> 
      {/* Other components that might need the quote */}
    </div>
  );
}

// RandomQuote.jsx
function RandomQuote({ quote, onGetQuote }) {
  return (
    // ... (rest of the component)
  );
}

In this approach:

  • The quote state is lifted up to the App component.

  • The App component passes the quote and a onGetQuote function (which updates the quote state in the parent) as props to the RandomQuote component.

  • Now, all instances of the RandomQuote component will display the same quote, ensuring consistency.

Key Points Illustrated in the Image

  • The image visually represents the concept of lifting state up from a child component to the parent.

  • It highlights the benefits of lifting state up, such as sharing state between components and minimizing prop drilling.