在 React 中使用 ErrorBoundary 组件时,如果发生错误并展示了 fallback UI,React Router 的跳转确实会失效。这是因为错误边界捕获了错误并阻止了事件冒泡,导致 React Router 无法接收到路由变化的事件。

要解决这个问题,你可以在 ErrorBoundary 组件中添加一个返回按钮,当用户点击它时,可以重新导航到指定的页面。以下是一个示例代码:

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

class ErrorBoundary extends React.Component {
  state = {
    hasError: false
  };

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

  handleBackClick = () => {
    this.props.history.push('/'); // 替换成你要跳转的路径
  };

  render() {
    if (this.state.hasError) {
      return (
        <div>
          <h1>出错了!</h1>
          <button onClick={this.handleBackClick}>返回</button>
        </div>
      );
    }

    return this.props.children;
  }
}

export default withRouter(ErrorBoundary);

在上面的示例中,handleBackClick 方法使用 history.push 方法来跳转到指定的路径。你需要使用 withRouter 高阶组件将 ErrorBoundary 组件包装起来,以便它能够获取到 React Router 的 history 对象。

然后,你可以将 ErrorBoundary 组件包裹在需要捕获错误的组件或路由上,如下所示:

import React from 'react';
import ErrorBoundary from './ErrorBoundary';

function App() {
  return (
    <div>
      <ErrorBoundary>
        {/* 其他组件或路由 */}
      </ErrorBoundary>
    </div>
  );
}

export default App;

这样,当错误发生时,用户可以点击返回按钮重新导航到指定页面,而不会导致 React Router 失效

reactjs 使用 ErrorBoundary 时出现错误展示 fallback 之后react-router 跳转就失效了

原文地址: https://www.cveoy.top/t/topic/h3YR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录