useEffect, useRef and useCallback with 1 project | Chai aur react tutorial #10 Summary

Vishesh GuptaVishesh Gupta
3 min read

Watch - Chai aur react #10

Key Concepts Covered:

  1. Project Setup:

    • You started by setting up the React project with Vite and configuring Tailwind CSS for styling, making it visually appealing and efficient for building the UI.
  2. Component Layout:

    • The project consists of three main UI elements:

      1. A heading for "Password Generator".

      2. An input box (read-only) that displays the generated password, along with a "Copy" button.

      3. A section with sliders and checkboxes to adjust the password length and include numbers or symbols.

  3. useEffect Hook:

    • Purpose: useEffect is used to perform side effects. You utilized it to generate the password when the component first loads (initial render) and whenever the state (isNumbers, isSymbols, length) changes.

    • Dependency Array: Adding variables like isNumbers, isSymbols, and length to the dependency array ensures that useEffect only re-runs when any of these variables are updated.

    • Empty Dependency Array: You used an empty array ([]) to make sure that the password is generated only once when the component first renders.

  4. useCallback Hook:

    • Purpose: useCallback is used to memoize functions, which prevents them from being recreated on every render. This is especially important for performance when a function doesn’t need to change unless certain dependencies do.

    • You used it for the password generation logic, ensuring the function is only re-created when its dependencies (like isNumbers, isSymbols, or length) change.

  5. useRef Hook:

    • Purpose: useRef is used to store mutable references to DOM elements without triggering a re-render. It's like a persistent storage container for DOM elements that doesn’t cause React to re-render when updated.

    • You used it to reference the password input field, enabling features like copying the password to the clipboard and selecting the text programmatically.

    • Comparison to document.getElementById: You correctly mentioned that useRef works similarly to how you'd use document.getElementById in plain JavaScript, but it fits within the React paradigm better.

  6. Copy to Clipboard:

    • For copying the password, you implemented a copyToClipboard function that interacts with the DOM via the window object and uses the password reference (from useRef) to access the input field.

Visualizing the Process:

  • Initial Setup: When the page first loads, useEffect runs the password generation function, setting an initial password.

  • User Interaction: When the user interacts with the slider or checkboxes, React updates the respective state variables (isNumbers, isSymbols, length), which causes useEffect to re-run and generate a new password.

  • Copy Functionality: When the user clicks "Copy", the password is copied to the clipboard, and you used useRef to reference the input field to programmatically select the password text.

Clarifications:

  • Why Use useCallback?: Without useCallback, functions (like the password generator) would be redefined on every render, which could lead to performance issues. useCallback ensures that the function is only recreated when necessary, avoiding unnecessary computation.

  • useRef vs. useState: useRef doesn’t cause re-renders when the value it stores changes. This makes it perfect for managing DOM elements or persisting mutable values between renders.

Summary of our Learning:

In this video We've effectively learned:

  • How to use useEffect to handle side effects, particularly for things like loading data or updating the UI based on state changes.

  • How to use useCallback to optimize performance by memoizing functions that don’t need to be recreated on every render.

  • How to use useRef to interact with DOM elements directly without causing re-renders.

10
Subscribe to my newsletter

Read articles from Vishesh Gupta directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Vishesh Gupta
Vishesh Gupta