当前位置: 首页 > 知识库问答 >
问题:

react.js - 如何在React + UMI项目中实现错误拦截并保持菜单可用?

高经艺
2024-01-11

React + UMI页面由于前端代码bug(如空指针)导致报错,页面显示something wrong...,如何在报错的情况下使菜单仍可用,即报错情况下点击菜单仍能切到其他页面?

试了错误拦截,但错误拦截也只是显示预设的错误UI界面而已,点击菜单栏仍不可用,即无法跳转,地址栏虽然变了,但页面还是显示的错误页面。
我希望虽然页面报错了,但是也只是影响当前页面,而不会影响其他页面,切菜单仍可访问其他页面。

共有1个答案

洪季萌
2024-01-11

要实现这个目标,你可以使用React的错误边界组件。错误边界组件能够在其子组件树中捕获并处理JavaScript错误,使得即使在发生错误的情况下,页面也不会完全崩溃,而是能够保持部分功能。

首先,你需要创建一个错误边界组件。下面是一个简单的例子:

class ErrorBoundary extends React.Component {  constructor(props) {    super(props);    this.state = { hasError: false };  }  static getDerivedStateFromError(error) {    return { hasError: true };  }  componentDidCatch(error, errorInfo) {    console.error(error, errorInfo);  }  render() {    if (this.state.hasError) {      // You can render any custom fallback UI you want here      return <h1>Something went wrong.</h1>;    }    return this.props.children; // Render the child components  }}

然后,你可以将这个错误边界组件应用到你的应用的最外层,这样它就可以捕获所有子组件中的错误:

import React from 'react';import ReactDOM from 'react-dom';import { Router } from 'umi';import ErrorBoundary from './ErrorBoundary';import Menu from './Menu';import Page1 from './Page1';import Page2 from './Page2';import './index.css';const routes = [  { path: '/', component: Menu, exact: true },  { path: '/page1', component: Page1 },  { path: '/page2', component: Page2 },];ReactDOM.render(  <React.StrictMode>    <ErrorBoundary>      <Router {...routes} />    </ErrorBoundary>  </React.StrictMode>,  document.getElementById('root') as HTMLElement,);

这样,即使某个页面抛出了错误,错误边界组件会捕获这个错误,并显示一个备用的UI(在这个例子中是一个简单的提示信息)。同时,其他的菜单项仍然可以正常工作,因为它们是在错误边界组件之外的组件。

 类似资料:
  • 如何通过全局拦截特定格式的url跳转 重写window.location.href window.open等跳转方式的进行拦截

  • 我使用的是Spring boot 2.2.9,我在获取401 HTTP错误的入口点时遇到问题,我正在尝试更改响应的行为,就像我们可以使用Spring错误处理程序(ResponseEntityExceptionHandler类)处理其他HTTP错误一样,谢谢

  • 本文向大家介绍Swift项目中利用SWRevealViewController实现侧滑菜单,包括了Swift项目中利用SWRevealViewController实现侧滑菜单的使用技巧和注意事项,需要的朋友参考一下 像往常一样,我们还是创建一个Demo App 来展示一下具体如何使用SWRevealViewController。这个Demo 很简单,功能上也不完善,主要的目的只是引导你去了解如何实

  • 这是一个由脚手架创建的react项目,我想给项目配置别名 于是我npm run eject暴露配置,然后进行了配置,但是好像不管用,有人知道是为什么吗? 这是原来就定义好的路径 接着在配置中使用 但是不管用 这是报错内容 这是TS配置

  • 问题内容: 我看到 一吨 的条目在我的Tomcat日志(样品粘贴下面)。这些在几个月前进行次要版本升级(Spring Security 4.2.4,IIRC)后开始出现在我的日志文件中,因此,这显然是默认情况下启用的Spring新安全功能。这里报告了类似的问题,但是我的问题专门涉及如何在控制器中拦截这些异常。有一个针对此问题的Spring Security错误记录(提供一种处理RequestRej

  • 我在Tomcat日志中看到大量条目(示例粘贴在下面)。在几个月前的一次小版本升级(Spring Security 4.2.4,IIRC)后,这些功能开始出现在我的日志文件中,因此这显然是Spring中默认启用的一个新的安全特性。这里报告了一个类似的问题,但我的问题具体涉及如何在控制器中拦截这些异常。这个问题有一个Spring Securitybug(提供一种处理RequestRejectedExc