Error Handling in React.js

Error Boundaries:

Defining Error Boundaries:

Error boundaries are regular React components that define a special lifecycle method componentDidCatch(error, errorInfo) to catch errors that occur within their child components.

                                      
                                      class ErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  componentDidCatch(error, errorInfo) {
    // Log the error to an error reporting service
    console.error('Error caught by ErrorBoundary:', error, errorInfo);
    this.setState({ hasError: true });
  }

  render() {
    if (this.state.hasError) {
      return <FallbackUI />;
    }
    return this.props.children;
  }
}

                                      
                                    

Using Error Boundaries:

You can wrap any part of your component tree with an error boundary to catch errors that occur within it.

                                      
<ErrorBoundary>
    <MyComponent />
</ErrorBoundary>

                                      
                                    

Fallback UI:

Inside the componentDidCatch method, you can update the state to indicate that an error has occurred and render a fallback UI instead of crashing the application.

Handling Errors Gracefully in Components:

Conditional Rendering:

Check for errors in your component's render method and conditionally render a fallback UI or an error message.

                                      
                                      function MyComponent() {
  if (errorCondition) {
    return <ErrorMessage />;
  }
  return <RegularComponent />;
}
                                      
                                    

Try-Catch Blocks:

Use try-catch blocks to handle errors within specific functions or sections of code.

                                      
                                      function MyComponent() {
  try {
    // Code that might throw an error
  } catch (error) {
    // Handle the error
    return <ErrorMessage />;
  }
  return <RegularComponent />;
}

                                      
                                    

Error Propagation:

Pass error state or error-handling functions as props to child components, allowing them to handle errors locally or propagate them to higher-level components.