Bird
Raised Fist0
React Nativemobile~20 mins

Memory leak detection in React Native - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Memory Leak Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ ui_behavior
intermediate
2:00remaining
Detecting memory leaks in React Native components
Consider a React Native component that fetches data on mount and sets state. Which behavior below most likely indicates a memory leak?
AThe component renders correctly but shows a loading spinner indefinitely.
BThe component updates state after it has been unmounted, causing a warning.
CThe component crashes immediately on launch with a syntax error.
DThe component fails to fetch data on mount and shows a blank screen.
Attempts:
2 left
💡 Hint
Think about what happens if asynchronous tasks try to update state after the component is gone.
🧠 Conceptual
intermediate
2:00remaining
Understanding cleanup in useEffect
In React Native, which useEffect pattern helps prevent memory leaks when subscribing to events?
React Native
useEffect(() => {
  const subscription = eventEmitter.addListener('event', handler);
  return () => {
    subscription.remove();
  };
}, []);
AReturning a cleanup function that removes the subscription.
BNot returning anything from useEffect.
CCalling the subscription inside the effect without cleanup.
DUsing setTimeout inside useEffect without clearing it.
Attempts:
2 left
💡 Hint
Think about how to stop listening to events when the component unmounts.
❓ lifecycle
advanced
2:00remaining
Identifying memory leaks from timers
What is the output behavior when a React Native component sets a timer with setInterval but does not clear it on unmount?
React Native
function TimerComponent() {
  React.useEffect(() => {
    const id = setInterval(() => console.log('tick'), 1000);
    return () => clearInterval(id);
  }, []);
  return null;
}
AConsole logs 'tick' every second even after component unmounts, causing memory leak.
BConsole logs 'tick' only while component is mounted, then stops automatically.
CComponent throws an error on unmount due to missing clearInterval.
DNo console output because setInterval is never called.
Attempts:
2 left
💡 Hint
Consider what happens to timers when components unmount without cleanup.
🔧 Debug
advanced
2:00remaining
Finding the cause of a memory leak warning
Given this React Native code, what causes the memory leak warning? function Example() { const [data, setData] = React.useState(null); React.useEffect(() => { fetchData().then(response => setData(response)); }, []); return null; }
ANo memory leak because useEffect has empty dependency array.
BfetchData is not awaited, causing syntax error.
CsetData is called synchronously inside useEffect, no warning.
DfetchData promise resolves after component unmounts, setData called on unmounted component.
Attempts:
2 left
💡 Hint
Think about asynchronous calls and component lifecycle.
🧠 Conceptual
expert
3:00remaining
Best practice to avoid memory leaks in React Native navigation
In React Navigation, which practice helps prevent memory leaks when navigating between screens?
AUse setTimeout without clearing it to delay navigation.
BKeep all event listeners active to maintain state across screens.
CRemove event listeners and cancel async tasks in useEffect cleanup before screen unmount.
DAvoid using useEffect to manage side effects on screens.
Attempts:
2 left
💡 Hint
Think about cleaning up resources when leaving a screen.

Practice

(1/5)
1.

What is a common cause of memory leaks in React Native apps?

useEffect hooks that do not clean up resources properly.

easy
A. Not cleaning up subscriptions or timers in useEffect
B. Using too many View components
C. Writing styles inline instead of in StyleSheet
D. Using functional components instead of class components

Solution

  1. Step 1: Understand memory leaks in React Native

    Memory leaks often happen when resources like timers or subscriptions are not cleaned up after a component unmounts.
  2. Step 2: Identify the role of useEffect cleanup

    The cleanup function inside useEffect is used to clear timers or unsubscribe to prevent leaks.
  3. Final Answer:

    Not cleaning up subscriptions or timers in useEffect -> Option A
  4. Quick Check:

    Failing to cleanup in useEffect causes leaks = B [OK]
Hint: Always clean timers and subscriptions in useEffect cleanup [OK]
Common Mistakes:
  • Ignoring cleanup functions in useEffect
  • Confusing styling issues with memory leaks
  • Thinking functional components cause leaks
2.

Which of the following is the correct syntax to clean up a timer inside useEffect?

useEffect(() => {
  const timer = setTimeout(() => console.log('Hi'), 1000);
  return () => ???
}, []);
easy
A. clearTimeout(timer);
B. clearInterval(timer);
C. cancelTimeout(timer);
D. stopTimer(timer);

Solution

  1. Step 1: Identify the timer type

    The timer is created with setTimeout, so it must be cleared with clearTimeout.
  2. Step 2: Match cleanup function

    The cleanup function should call clearTimeout(timer) to cancel the timer.
  3. Final Answer:

    clearTimeout(timer); -> Option A
  4. Quick Check:

    setTimeout cleared by clearTimeout = A [OK]
Hint: Match setTimeout with clearTimeout in cleanup [OK]
Common Mistakes:
  • Using clearInterval for setTimeout
  • Using non-existent cancelTimeout or stopTimer
  • Forgetting to return cleanup function
3.

What will happen if the following React Native component does NOT clean up the interval?

function Timer() {
  React.useEffect(() => {
    const id = setInterval(() => console.log('tick'), 1000);
  }, []);
  return null;
}
medium
A. The component will throw a syntax error
B. The interval stops automatically when component unmounts
C. The interval runs only once and stops
D. The interval keeps running even after component unmount, causing memory leak

Solution

  1. Step 1: Analyze useEffect without cleanup

    The interval is set but no cleanup function is returned, so it never stops.
  2. Step 2: Understand effect of missing cleanup

    When the component unmounts, the interval keeps running, causing a memory leak.
  3. Final Answer:

    The interval keeps running even after component unmount, causing memory leak -> Option D
  4. Quick Check:

    No cleanup means interval runs forever = C [OK]
Hint: No cleanup in useEffect means timers leak [OK]
Common Mistakes:
  • Assuming intervals stop automatically
  • Confusing syntax errors with runtime leaks
  • Thinking interval runs only once
4.

Identify the bug causing a memory leak in this React Native component:

function DataFetcher() {
  React.useEffect(() => {
    const subscription = api.subscribe(data => console.log(data));
    // Missing cleanup function here
  }, []);
  return null;
}
medium
A. Empty dependency array in useEffect
B. Missing cleanup function to unsubscribe from api
C. Not returning JSX from component
D. Using arrow function inside useEffect

Solution

  1. Step 1: Check subscription management

    The component subscribes to an API but does not unsubscribe on unmount.
  2. Step 2: Identify missing cleanup

    Without returning a cleanup function that calls subscription.unsubscribe(), the subscription stays active causing a leak.
  3. Final Answer:

    Missing cleanup function to unsubscribe from api -> Option B
  4. Quick Check:

    Missing subscription cleanup causes leak = D [OK]
Hint: Always unsubscribe in useEffect cleanup [OK]
Common Mistakes:
  • Thinking arrow functions cause leaks
  • Confusing JSX return with memory leaks
  • Ignoring cleanup for subscriptions
5.

You have a React Native component that fetches data every 5 seconds using setInterval. How should you modify the code to prevent memory leaks when the component unmounts?

function PollingComponent() {
  React.useEffect(() => {
    const id = setInterval(() => fetchData(), 5000);
    // What goes here?
  }, []);
  return null;
}
hard
A. Remove the dependency array from useEffect
B. Call fetchData() once outside useEffect
C. Return a cleanup function that calls clearInterval(id)
D. Use setTimeout instead of setInterval without cleanup

Solution

  1. Step 1: Understand interval usage

    The component sets an interval to fetch data repeatedly every 5 seconds.
  2. Step 2: Prevent memory leak on unmount

    To stop the interval when the component unmounts, return a cleanup function that calls clearInterval(id).
  3. Final Answer:

    Return a cleanup function that calls clearInterval(id) -> Option C
  4. Quick Check:

    Clear intervals in cleanup to avoid leaks = A [OK]
Hint: Always clear intervals in useEffect cleanup [OK]
Common Mistakes:
  • Removing dependency array breaks effect logic
  • Using setTimeout without cleanup causes leaks
  • Calling fetchData only once misses polling
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