Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I redirect within an ErrorBoundary?

I'm using ErrorBoundary in my React app and want to redirect to the main page when an error occurs - but my redirect is not working. Instead, the application stays on the same page.

In comparison, adding a button allows the user to switch pages on clicking it.

But I instead want to automatically take the user there when the error occurs.

Surely there must be an easy way to do this that I'm missing.

import React from 'react';
import { Redirect } from 'react-router-dom';

class ErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = { error: null, errorInfo: null };
  }

  componentDidCatch(error, errorInfo) {
    this.setState({
      error: error,
      errorInfo: errorInfo
    })
    console.log(error, errorInfo);
  }

  render() {
    if (this.state.errorInfo) {
      return (
        <div>
          {/* <Button href="/index.html">Go Home</Button> */}
          <Redirect to="/index.html" />
        </div>
      );
    }

    return this.props.children; 
  }
}

export default ErrorBoundary;

I've also tried returning a Route with no luck:

render() {
  if (this.state.errorInfo) {
    return (
      <Route path="/Home" component={Home} />
    );
  }
like image 997
Woodchuck Avatar asked May 02 '26 07:05

Woodchuck


1 Answers

I am assuming you are also using react-router-dom inside your project.

Make sure that your ErrorBoundary component is inside the BrowserRouter wrapper in your index.js or App.js file. If so, you can simply connect your ErrorBoundary component to the react router by doing

export default withRouter(ErrorBoundary);

Make sure that it's imported correctly

import { withRouter } from 'react-router-dom';

If an error occurs you can then call:

this.props.history.push('/'); // will forward you to wherever you want

This will only change the url in the browser, depending on what else you have your ErrorBoundary doing you need to call

window.location.reload();

right after you pushed to the history. But this is only something you need to do when you configured your ErrorBoundary to overwrite your child props.

like image 84
Devchris Avatar answered May 04 '26 04:05

Devchris



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!