朋友们好啊,我是海怪,刚才老板对我说:海怪,发生甚么事了,怎么页面白屏了?我说:怎么回事?给我发了几张截图。我打开控制台一看:
对于 React 来说,一般用 ErrorBoundary 来实现,今天就带大家一起造一个 react-error-boundary 的轮子吧~。 以下所有代码都已整理到 Github: https://github.com/Haixiang6123/learn-error-bounday 参考的轮子: https://www.npmjs.com/package/react-error-boundary
在下一节中,我们将了解如何利用 react-error-boundary 库来处理所有这些边界情况。 2. 为此,我们将使用 react-error-boundary 库,该库可以按如下方式安装: npm install --save react-error-boundary yarn add react-error-boundary 让我们使用 react-error-boundary 来正确捕获错误并提供重试机制: import { ErrorBoundary, FallbackProps } from "react-error-boundary react-error-boundary 「文档」 展示了如何利用其他props(例如:onReset=)来处理更高级的场景。 同样,通过提供 handleError() hook 来帮助捕获与事件相关的和异步错误,庆幸的是 react-error-boundary已经给我们提供了。
这个特性只有 class 组件有,function 组件没有: 不过一般也不用自己写这种 ErrorBoundary 组件,直接用 react-error-boundary 这个包就行: npm install --save react-error-boundary 试一下: import { ErrorBoundary } from "react-error-boundary"; function Bbb
return this.props.children; } } <ErrorBoundary> <MyWidget /> </ErrorBoundary> 复制代码 开源世界就是好,早有大神封装了react-error-boundary import {ErrorBoundary} from 'react-error-boundary' function ErrorFallback({error, resetErrorBoundary
开源社区已经有了成熟的封装解决方案react-error-boundary。 并且也提供了 HOC 的方式供使用 Error Boundary 包子组件 import {ErrorBoundary} from 'react-error-boundary' function ErrorFallback} > <ComponentThatMayError /> </ErrorBoundary>) 高阶组件 import {withErrorBoundary} from 'react-error-boundary ] ] } } } 通过配置一个自定义的 Error Boundary 路径,即可实现所有的组件包一个 ErrorBoundary 了,再结合react-error-boundary
import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import { ErrorBoundary } from "react-error-boundary
return ( <ErrorBoundary> <MyComponent /> </ErrorBoundary> ); } } 使用第三方库(react-error-boundary 所以,我们这里选择第三方库react-error-boundary[36] 它使用一个名为 ErrorBoundary 的简单组件,我们可以使用它来包装可能容易出错的代码。 react-error-boundary的优点在于它消除了手动编写类组件和处理状态的需要。它在幕后完成所有繁重的工作,使我们能够专注于构建应用程序。 关于,如何使用react-error-boundary我们后期在详细讲。(这里就不再过多解释) 9. 自定义Hook ❝不要重复做那些无关紧要的事情 ❞ 就像上面说的那样,现在是Hook的天下。
import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import { ErrorBoundary } from "react-error-boundary
你可以使用像React中的 ErrorBoundary 这样的内置组件,或者像 react-error-boundary 或 react-native-error-boundary 这样的第三方库来实现这个目的
只有订单模块提示错误 import { QueryErrorResetBoundary } from '@tanstack/react-query'; import { ErrorBoundary } from 'react-error-boundary
user} />; } // ✅ 正确:添加错误边界和Suspense import { Suspense } from'react'; import { ErrorBoundary } from'react-error-boundary
结果:整个应用崩溃 ✅ 完整的错误处理方案 第一步:创建全局 Error Boundary // ✅ 全局 Error Boundary import { ErrorBoundary } from'react-error-boundary