React useEffect Interview Questions and Answers (2026)

Master React useEffect with production-ready interview questions, dependency arrays, cleanup functions, API calls, lifecycle mapping, and senior-level best practices.

React useEffect Interview Questions and Answers

Introduction

useEffect() is one of the most important React Hooks because it allows Functional Components to perform side effects such as:

  • API calls
  • Timers
  • Event listeners
  • WebSocket connections
  • Local Storage updates
  • DOM manipulation
  • Cleanup operations

Before Hooks, these tasks were handled using lifecycle methods in Class Components. Today, useEffect() is the standard approach for managing side effects in modern React applications.

Understanding useEffect() is essential because it is one of the most frequently asked React interview topics.

This guide covers the 15 most frequently asked useEffect interview questions with production examples, diagrams, and senior-level best practices.


Q1. What is useEffect()?

Answer

useEffect() is a React Hook used to perform side effects inside Functional Components.

Syntax

useEffect(() => {

    // Side effect

}, []);

Common side effects include:

  • Fetching data
  • Updating the document title
  • Setting timers
  • Adding event listeners
  • Synchronizing with external systems

Why Interviewers Ask This

Interviewers want to verify that you understand React's lifecycle in Functional Components.

Production Example

Loading user information when a dashboard opens.


Q2. Why is useEffect() used?

Answer

React components should primarily focus on rendering UI.

useEffect() separates rendering logic from side-effect logic.

Without useEffect()

Render UI

+

API Calls

+

Timers

+

Subscriptions

With useEffect()

graph TD
    Render_UI[Render UI] --> Side_Effects[Side Effects]
    Side_Effects[Side Effects] --> Cleanup[Cleanup]

Benefits

  • Cleaner code
  • Better maintainability
  • Easier testing

Q3. What are the different dependency array options?

Answer

No Dependency Array

Runs after every render.

useEffect(() => {

    console.log("Runs Every Render");

});

Empty Dependency Array

Runs only once after the initial render.

useEffect(() => {

    console.log("Runs Once");

}, []);

Dependency Array

Runs when dependencies change.

useEffect(() => {

    console.log("Runs on Count Change");

}, [count]);

Q4. When does useEffect() execute?

Answer

Execution Flow

graph TD
    Component_Render[Component Render] --> Browser_Paint[Browser Paint]
    Browser_Paint[Browser Paint] --> Run_useEffect[Run useEffect()]

Unlike useLayoutEffect(), useEffect() executes after the browser paints the UI.

Production Example

Fetching dashboard data after the initial screen appears.


Q5. What is a Cleanup Function?

Answer

Cleanup functions release resources before a component unmounts or before the effect runs again.

Example

useEffect(() => {

    const timer = setInterval(() => {

        console.log("Running");

    }, 1000);

    return () => {

        clearInterval(timer);

    };

}, []);

Production Uses

  • Clear timers
  • Remove event listeners
  • Close WebSocket connections
  • Cancel subscriptions

Q6. How do you fetch APIs using useEffect()?

Answer

Example

useEffect(() => {

    async function loadUsers() {

        const response = await fetch("/api/users");

        const data = await response.json();

        console.log(data);

    }

    loadUsers();

}, []);

Production Example

Loading product lists or user profiles.


Q7. What causes Infinite Loops in useEffect()?

Answer

Infinite loops occur when an effect continuously updates state that triggers the same effect again.

Example

useEffect(() => {

    setCount(count + 1);

}, [count]);

Flow

graph TD
    State_Update[State Update] --> Component_Re_render[Component Re-render]
    Component_Re_render[Component Re-render] --> Effect_Executes[Effect Executes]
    Effect_Executes[Effect Executes] --> State_Update_Again[State Update Again]

Solution

Review dependency arrays carefully and avoid unnecessary state updates.


Q8. Can multiple useEffect() Hooks be used?

Answer

Yes.

Using multiple effects improves separation of concerns.

Example

useEffect(() => {

    document.title = "Dashboard";

}, []);

useEffect(() => {

    fetchUsers();

}, []);

Benefits

  • Better readability
  • Easier debugging
  • Independent logic

Q9. Difference between useEffect() and useLayoutEffect()?

useEffect useLayoutEffect
Runs after paint Runs before paint
Non-blocking Blocking
Preferred for most cases Use only when DOM measurement is required

Production Example

Use useLayoutEffect() to measure an element's height before rendering animations.


Q10. What are common dependency array mistakes?

Answer

Common mistakes include:

  • Missing dependencies.
  • Incorrect dependency arrays.
  • Ignoring ESLint warnings.
  • Adding unstable functions unnecessarily.
  • Updating state inside effects without conditions.

Interview Tip

Always understand why each dependency exists.


Q11. Give production examples of useEffect().

Scenario Example
API Call Fetch users
Timer Countdown
Local Storage Save preferences
Event Listener Window resize
WebSocket Live notifications
Analytics Track page views
Authentication Validate session

Q12. How do you debug useEffect()?

Answer

Best practices:

  • Use React DevTools.
  • Log dependency values.
  • Enable ESLint Hook rules.
  • Check cleanup execution.
  • Inspect unnecessary renders.

Production Tip

Most useEffect() bugs originate from incorrect dependency arrays.


Q13. How does useEffect() affect performance?

Answer

Poorly written effects can:

  • Trigger unnecessary API calls.
  • Cause repeated renders.
  • Leak memory.
  • Block application performance.

Optimization strategies:

  • Use accurate dependency arrays.
  • Cancel unnecessary requests.
  • Split unrelated effects.
  • Memoize dependencies when appropriate.

Q14. What are common useEffect() interview mistakes?

Answer

Common mistakes include:

  • Using useEffect() for calculations that belong in rendering.
  • Forgetting cleanup functions.
  • Calling APIs repeatedly.
  • Ignoring dependency arrays.
  • Using one large effect for unrelated logic.
  • Assuming useEffect() runs before rendering.

Q15. What are senior-level useEffect() best practices?

Answer

Senior developers should:

  • Keep effects focused on one responsibility.
  • Always clean up subscriptions and timers.
  • Prefer multiple small effects over one large effect.
  • Handle API cancellation using AbortController.
  • Avoid unnecessary state updates.
  • Use ESLint Hook rules.
  • Minimize effect dependencies.
  • Prefer derived values over effects when possible.

Production Checklist

  • Correct dependencies
  • Cleanup implemented
  • API cancellation
  • No infinite loops
  • Small focused effects
  • Performance monitoring

Common useEffect Interview Mistakes

  • Forgetting the dependency array.
  • Suppressing ESLint Hook warnings without understanding them.
  • Mixing multiple responsibilities in a single effect.
  • Updating state unnecessarily inside effects.
  • Forgetting cleanup for timers, subscriptions, and event listeners.
  • Assuming useEffect() behaves like synchronous code.

Senior Developer Best Practices

  • Use useEffect() only for side effects.
  • Keep dependency arrays accurate and complete.
  • Split unrelated logic into separate effects.
  • Cancel API requests using AbortController to prevent race conditions.
  • Always clean up event listeners, intervals, and subscriptions.
  • Avoid performing expensive calculations inside effects.
  • Prefer React's declarative rendering instead of imperative DOM manipulation.
  • Profile effects using React DevTools when debugging performance issues.

Interview Quick Revision

Concept Purpose
useEffect Side effects
Dependency Array Controls execution
Empty Array Run once
No Array Run every render
Cleanup Function Release resources
API Calls Fetch server data
Timer Delayed or repeated actions
Event Listener Browser events
useLayoutEffect Before browser paint
AbortController Cancel requests

useEffect Lifecycle

graph TD
    Component_Mount[Component Mount] --> Render_UI[Render UI]
    Render_UI[Render UI] --> Browser_Paint[Browser Paint]
    Browser_Paint[Browser Paint] --> Run_useEffect[Run useEffect()]
    Run_useEffect[Run useEffect()] --> Dependency_Changes[Dependency Changes?]
    Dependency_Changes[Dependency Changes?] --> Yes[Yes]
    Yes[Yes] --> Cleanup_Previous_Effect[Cleanup Previous Effect]
    Cleanup_Previous_Effect[Cleanup Previous Effect] --> Run_Effect_Again[Run Effect Again]
    Run_Effect_Again[Run Effect Again] --> Component_Unmount[Component Unmount]
    Component_Unmount[Component Unmount] --> Final_Cleanup[Final Cleanup]

API Request Flow

graph TD
    Component_Mount[Component Mount] --> useEffect[useEffect()]
    useEffect[useEffect()] --> Fetch_API[Fetch API]
    Fetch_API[Fetch API] --> Receive_Response[Receive Response]
    Receive_Response[Receive Response] --> Update_State[Update State]
    Update_State[Update State] --> Component_Re_render[Component Re-render]
    Component_Re_render[Component Re-render] --> Display_Data[Display Data]

Dependency Array Behavior

Dependency Array Execution
Omitted Every render
[] Initial render only
[count] When count changes
[user, theme] When either value changes

Key Takeaways

  • useEffect() is used to perform side effects in Functional Components.
  • Common side effects include API calls, timers, event listeners, subscriptions, and local storage synchronization.
  • The dependency array determines when an effect executes.
  • Cleanup functions prevent memory leaks by releasing resources before unmounting or before the next effect execution.
  • Multiple useEffect() Hooks improve code organization by separating responsibilities.
  • Incorrect dependency arrays are one of the most common causes of bugs and infinite rendering loops.
  • useEffect() runs after the browser paints, whereas useLayoutEffect() runs before painting.
  • Production applications should cancel API requests, clean up subscriptions, and avoid unnecessary state updates.
  • Keeping effects focused, predictable, and well-scoped improves maintainability and performance.
  • useEffect() is one of the most frequently tested React topics in frontend technical interviews.