Bird
Raised Fist0
Reactframework~5 mins

Cleanup function in React - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a cleanup function in React's useEffect hook?
A cleanup function is a function returned from useEffect that React runs before the component unmounts or before the effect runs again. It helps to clean up resources like timers or subscriptions to avoid memory leaks.
Click to reveal answer
beginner
When is the cleanup function inside useEffect called?
The cleanup function runs right before the component unmounts and also before the effect runs again if the dependencies change.
Click to reveal answer
beginner
Why should you use a cleanup function in React effects?
To stop ongoing processes like timers, cancel subscriptions, or remove event listeners. This prevents bugs and memory leaks when components update or disappear.
Click to reveal answer
intermediate
Show a simple example of a cleanup function in useEffect that clears a timer.
useEffect(() => {
  const timer = setTimeout(() => {
    console.log('Timer done');
  }, 1000);
  return () => clearTimeout(timer);
}, []);
Click to reveal answer
intermediate
What happens if you forget to add a cleanup function for subscriptions in useEffect?
The subscription keeps running even after the component unmounts, causing memory leaks and possibly unexpected behavior or errors.
Click to reveal answer
When does React call the cleanup function returned by useEffect?
ABefore the component unmounts or before the effect runs again
BOnly when the component mounts
COnly after the component updates
DNever, cleanup functions are optional
What is a common use case for a cleanup function in useEffect?
AStarting a timer
BCleaning up a timer or subscription
CRendering UI elements
DFetching data
What happens if you don't clean up a subscription in useEffect?
AThe subscription stops automatically
BReact throws an error
CThe subscription continues and may cause memory leaks
DThe component re-renders infinitely
How do you define a cleanup function inside useEffect?
ABy returning a function from useEffect
BBy calling a function inside useEffect
CBy passing a function as a dependency
DBy using a separate useCleanup hook
Which React hook commonly uses cleanup functions?
AuseMemo
BuseState
CuseContext
DuseEffect
Explain what a cleanup function is in React and why it is important.
Think about what happens when a component disappears or updates.
You got /3 concepts.
    Describe how you would use a cleanup function to clear a timer in a React component.
    Remember to stop the timer when the component unmounts.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a cleanup function in a React useEffect hook?
      easy
      A. To initialize state variables before rendering
      B. To remove timers, listeners, or subscriptions when the component unmounts or before the effect reruns
      C. To fetch data from an API after the component mounts
      D. To render JSX elements conditionally

      Solution

      1. Step 1: Understand the role of cleanup functions

        Cleanup functions are used to tidy up side effects like timers or event listeners to prevent memory leaks.
      2. Step 2: Identify when cleanup runs

        Cleanup runs when a component unmounts or before the effect runs again, ensuring resources are freed.
      3. Final Answer:

        To remove timers, listeners, or subscriptions when the component unmounts or before the effect reruns -> Option B
      4. Quick Check:

        Cleanup function purpose = Remove resources [OK]
      Hint: Cleanup frees resources when component unmounts or effect reruns [OK]
      Common Mistakes:
      • Thinking cleanup initializes state
      • Confusing cleanup with data fetching
      • Assuming cleanup runs after every render
      2. Which of the following is the correct syntax to define a cleanup function inside useEffect?
      easy
      A. useEffect(() => { () => { clearTimeout(timer); }; }, []);
      B. useEffect(() => { clearTimeout(timer); return; }, []);
      C. useEffect(() => { return () => { clearTimeout(timer); }; }, []);
      D. useEffect(() => { return clearTimeout(timer); }, []);

      Solution

      1. Step 1: Recognize cleanup function syntax

        The cleanup function must be returned from the effect callback as a function.
      2. Step 2: Check each option

        useEffect(() => { return () => { clearTimeout(timer); }; }, []); correctly returns a function that calls clearTimeout. Others either don't return a function or return the wrong value.
      3. Final Answer:

        useEffect(() => { return () => { clearTimeout(timer); }; }, []); -> Option C
      4. Quick Check:

        Cleanup function = returned function inside useEffect [OK]
      Hint: Cleanup must be a returned function inside useEffect [OK]
      Common Mistakes:
      • Not returning a function from useEffect
      • Returning the result of cleanup call instead of a function
      • Placing cleanup code outside the returned function
      3. What will be logged to the console when the component unmounts in this code?
      function Timer() {
        React.useEffect(() => {
          const id = setInterval(() => console.log('tick'), 1000);
          return () => {
            clearInterval(id);
            console.log('cleanup');
          };
        }, []);
        return null;
      }
      medium
      A. Nothing, because the component never unmounts
      B. 'tick' once and no 'cleanup'
      C. 'cleanup' every second and no 'tick'
      D. 'tick' every second and then 'cleanup' once when unmounting

      Solution

      1. Step 1: Understand the effect behavior

        The effect sets an interval that logs 'tick' every second and returns a cleanup function that clears the interval and logs 'cleanup'.
      2. Step 2: Trace what happens on unmount

        When the component unmounts, the cleanup runs once, clearing the interval and logging 'cleanup'.
      3. Final Answer:

        'tick' every second and then 'cleanup' once when unmounting -> Option D
      4. Quick Check:

        Interval logs 'tick'; cleanup logs 'cleanup' once [OK]
      Hint: Cleanup logs once on unmount, interval logs repeatedly [OK]
      Common Mistakes:
      • Thinking cleanup runs repeatedly
      • Confusing interval clearing with immediate stop
      • Expecting no logs at all
      4. Identify the error in this React effect with cleanup:
      useEffect(() => {
        window.addEventListener('resize', handleResize);
        return window.removeEventListener('resize', handleResize);
      }, []);
      medium
      A. The cleanup function should be a function returned, not the result of removeEventListener call
      B. The event listener should be added inside the cleanup function
      C. The effect should not have a dependency array
      D. handleResize should be defined inside useEffect

      Solution

      1. Step 1: Check cleanup function syntax

        The cleanup must be a function returned from useEffect, not the result of calling removeEventListener immediately.
      2. Step 2: Identify correct cleanup pattern

        The cleanup should be: return () => window.removeEventListener('resize', handleResize); to run on unmount.
      3. Final Answer:

        The cleanup function should be a function returned, not the result of removeEventListener call -> Option A
      4. Quick Check:

        Cleanup must be a returned function [OK]
      Hint: Return a function for cleanup, not the cleanup call itself [OK]
      Common Mistakes:
      • Calling cleanup immediately instead of returning a function
      • Adding event listener inside cleanup
      • Ignoring dependency array effects
      5. You want to subscribe to a WebSocket in a React component and clean up properly. Which code correctly uses a cleanup function to close the socket when the component unmounts or the URL changes?
      function SocketComponent({ url }) {
        React.useEffect(() => {
          const socket = new WebSocket(url);
          socket.onmessage = (event) => console.log(event.data);
          // What cleanup code is correct?
        }, [url]);
        return null;
      }
      hard
      A. return () => { socket.close(); };
      B. socket.close();
      C. return socket.close();
      D. return () => socket.onmessage = null;

      Solution

      1. Step 1: Understand cleanup for WebSocket

        To avoid leaks, the socket must be closed when the component unmounts or URL changes.
      2. Step 2: Identify correct cleanup syntax

        The cleanup must be a function returned from useEffect that calls socket.close(). return () => { socket.close(); }; does this correctly.
      3. Final Answer:

        return () => { socket.close(); }; -> Option A
      4. Quick Check:

        Cleanup returns function closing socket [OK]
      Hint: Return a function that closes socket for cleanup [OK]
      Common Mistakes:
      • Calling close immediately instead of returning a function
      • Returning the result of close() instead of a function
      • Only nullifying event handlers without closing socket
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard