Bird
Raised Fist0
Reactframework~10 mins

Error boundaries concept in React - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Error boundaries concept
Component Tree Rendering
↓
Child Component Throws Error?
↓
Error Boundary Catches
↓
Render Fallback UI
↓
User Sees Error Message
↓
App Continues Running
This flow shows how React renders components, catches errors in child components using error boundaries, and displays fallback UI without crashing the whole app.
Execution Sample
React
class ErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    return { hasError: true };
  }

  componentDidCatch(error, info) {
    // You can also log the error to an error reporting service
    console.error('Error caught by ErrorBoundary:', error, info);
  }

  render() {
    return this.state.hasError
      ? <div>Error occurred</div>
      : this.props.children;
  }
}
A simplified class-based error boundary component that catches errors in child components during rendering and shows an error message.
Execution Table
StepActionError Thrown?State hasErrorRendered Output
1Render ErrorBoundary with ChildComponentNofalseChildComponent output
2ChildComponent throws error during renderYesfalseNo output yet
3ErrorBoundary catches errorYestrueFallback UI shown
4User sees fallback UINotrue<div>Error occurred</div>
5App continues running without crashNotrueFallback UI remains
💡 Error caught by boundary, fallback UI rendered, app does not crash
Variable Tracker
VariableStartAfter Step 2After Step 3Final
hasErrorfalsefalsetruetrue
Key Moments - 3 Insights
Why doesn't the whole app crash when a child component throws an error?
Because the error boundary catches the error at Step 3 and sets hasError to true, rendering fallback UI instead of crashing (see execution_table row 3).
Does the error boundary catch errors in itself or only in child components?
It only catches errors in its child components during rendering, lifecycle methods, and constructors, not in itself.
What happens if no error boundary is present and a component throws an error?
The whole React component tree unmounts and the app crashes or shows a blank screen.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of hasError after Step 3?
Atrue
Bfalse
Cundefined
Dnull
💡 Hint
Check the 'State hasError' column at Step 3 in the execution_table.
At which step does the fallback UI start rendering?
AStep 4
BStep 2
CStep 3
DStep 1
💡 Hint
Look at the 'Rendered Output' column to see when fallback UI is shown.
If the child component never throws an error, what will the 'hasError' state be?
Atrue
Bfalse
Cnull
Dundefined
💡 Hint
Refer to the 'State hasError' column at Step 1 where no error is thrown.
Concept Snapshot
Error boundaries catch errors in child components during rendering.
They prevent the whole app from crashing.
Use state to track if an error occurred.
Render fallback UI when error happens.
Class components implement them using getDerivedStateFromError and componentDidCatch.
Errors outside render lifecycle are not caught.
Full Transcript
Error boundaries in React are special components that catch errors thrown by their child components during rendering, lifecycle methods, or constructors. When an error happens, the error boundary sets a state flag to true and renders a fallback UI instead of the broken component tree. This prevents the entire app from crashing and allows users to see a friendly error message. The execution flow starts with normal rendering, then if a child throws an error, the boundary catches it, updates state, and shows fallback UI. The app continues running normally after that. Without error boundaries, any error in a component would crash the whole React tree. This concept is important for building resilient React apps.

Practice

(1/5)
1. What is the main purpose of an Error Boundary in React?
easy
A. To catch JavaScript errors in child components and display a fallback UI
B. To manage state across multiple components
C. To optimize rendering performance
D. To handle user input validation

Solution

  1. Step 1: Understand Error Boundary role

    Error boundaries catch errors in the components below them in the tree to prevent the whole app from crashing.
  2. Step 2: Identify the correct purpose

    They show a fallback UI when an error happens, improving user experience.
  3. Final Answer:

    To catch JavaScript errors in child components and display a fallback UI -> Option A
  4. Quick Check:

    Error boundaries catch errors = C [OK]
Hint: Error boundaries catch errors and show fallback UI [OK]
Common Mistakes:
  • Confusing error boundaries with state management
  • Thinking error boundaries optimize rendering
  • Assuming error boundaries handle input validation
2. Which of the following is the correct way to define an Error Boundary component in React?
easy
A. A class component implementing componentDidCatch and getDerivedStateFromError
B. A functional component using useErrorBoundary hook
C. A class component implementing componentDidMount and shouldComponentUpdate
D. A functional component with useEffect to catch errors

Solution

  1. Step 1: Recall Error Boundary requirements

    Error boundaries must be class components that implement componentDidCatch and getDerivedStateFromError lifecycle methods.
  2. Step 2: Identify correct lifecycle methods

    Only A class component implementing componentDidCatch and getDerivedStateFromError lists these two required methods correctly.
  3. Final Answer:

    A class component implementing componentDidCatch and getDerivedStateFromError -> Option A
  4. Quick Check:

    Class + componentDidCatch + getDerivedStateFromError = A [OK]
Hint: Error boundaries are class components with special lifecycle methods [OK]
Common Mistakes:
  • Thinking functional components can be error boundaries
  • Confusing lifecycle methods needed for error boundaries
  • Using hooks that don't exist for error boundaries
3. Given this Error Boundary class component, what will be rendered if ChildComponent throws an error?
class ErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }
  static getDerivedStateFromError(error) {
    return { hasError: true };
  }
  componentDidCatch(error, info) {
    console.log('Error logged:', error);
  }
  render() {
    if (this.state.hasError) {
      return <h1>Something went wrong.</h1>;
    }
    return this.props.children;
  }
}

// Usage:
// <ErrorBoundary><ChildComponent /></ErrorBoundary>
medium
A. The original ChildComponent UI is shown
B. The app crashes with an uncaught error
C. Nothing is rendered (blank screen)
D. An error message Something went wrong. is shown

Solution

  1. Step 1: Understand error handling in ErrorBoundary

    If ChildComponent throws an error, getDerivedStateFromError sets hasError to true.
  2. Step 2: Check render output when error occurs

    When hasError is true, the component renders the fallback UI: <h1>Something went wrong.</h1>.
  3. Final Answer:

    An error message Something went wrong. is shown -> Option D
  4. Quick Check:

    Error caught shows fallback UI = D [OK]
Hint: Error sets state to show fallback UI, not original child [OK]
Common Mistakes:
  • Expecting child UI to show despite error
  • Thinking error causes app crash
  • Assuming blank screen on error
4. What is wrong with this Error Boundary component code?
class MyErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = { error: null };
  }
  componentDidCatch(error, info) {
    this.setState({ error });
  }
  render() {
    if (this.state.error) {
      return <h2>Error occurred</h2>;
    }
    return this.props.children;
  }
}
medium
A. componentDidCatch should not call setState
B. It lacks the static method getDerivedStateFromError to update state on error
C. The constructor should not initialize state
D. render method must not return children

Solution

  1. Step 1: Check error state update method

    Error boundaries must implement getDerivedStateFromError to update state when an error happens.
  2. Step 2: Identify missing static method

    This code only uses componentDidCatch to set state, which is incorrect because componentDidCatch is for side effects, not state updates.
  3. Final Answer:

    It lacks the static method getDerivedStateFromError to update state on error -> Option B
  4. Quick Check:

    Missing getDerivedStateFromError static method = A [OK]
Hint: State update on error must be in getDerivedStateFromError [OK]
Common Mistakes:
  • Updating state inside componentDidCatch
  • Forgetting static getDerivedStateFromError
  • Misusing lifecycle methods for error handling
5. You want to create an Error Boundary that logs errors to an external service and shows a fallback UI. Which of the following is the best approach?
class LoggingErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }
  static getDerivedStateFromError(error) {
    return { hasError: true };
  }
  componentDidCatch(error, info) {
    // ???
  }
  render() {
    if (this.state.hasError) {
      return <div><h1>Oops!</h1><p>Try refreshing.</p></div>;
    }
    return this.props.children;
  }
}
What should replace // ??? to correctly log errors without causing issues?
hard
A. Call an async logging function directly without try/catch
B. Update state again inside componentDidCatch to trigger re-render
C. Use a try/catch inside componentDidCatch to call the logging service safely
D. Ignore logging and only show fallback UI

Solution

  1. Step 1: Understand componentDidCatch role

    componentDidCatch is for side effects like logging errors but should handle errors safely to avoid crashing.
  2. Step 2: Choose safe logging approach

    Using try/catch inside componentDidCatch when calling async logging prevents unhandled errors from breaking the app.
  3. Final Answer:

    Use a try/catch inside componentDidCatch to call the logging service safely -> Option C
  4. Quick Check:

    Safe error logging with try/catch in componentDidCatch = B [OK]
Hint: Wrap logging calls in try/catch inside componentDidCatch [OK]
Common Mistakes:
  • Calling async logging without error handling
  • Updating state inside componentDidCatch causing loops
  • Skipping logging and losing error info
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