学院网站建设需求分析调研表,自己做电影网站可以赚钱吗,wordpress 标签类别,有别墅的件怎么写者1、React中错误异常捕获
在 React 中#xff0c;可以通过 Error Boundaries#xff08;错误边界#xff09;来捕获错误异常。Error Boundaries 是一种 React 组件#xff0c;它可以在其子组件树的渲染期间捕获 JavaScript 异常#xff0c;并且可以渲染出备用 UI。React 提…1、React中错误异常捕获
在 React 中可以通过 Error Boundaries错误边界来捕获错误异常。Error Boundaries 是一种 React 组件它可以在其子组件树的渲染期间捕获 JavaScript 异常并且可以渲染出备用 UI。React 提供了两个生命周期方法来处理错误边界componentDidCatch 和 getDerivedStateFromError。
其中componentDidCatch 生命周期方法在错误边界内的任何子组件抛出错误时被调用。它接收两个参数error 和 info。error 参数表示抛出的错误info 参数包含有关组件引发错误的组件堆栈的信息。通常情况下此方法将记录错误并更新组件的状态以显示备用 UI。 componentDidCatch方法用于处理错误异常当子组件抛出错误时React会在Error Boundary中调用componentDidCatch方法。在该方法中可以实现错误信息的记录和展示等逻辑。 getDerivedStateFromError方法会在componentDidCatch方法调用之后调用用于更新state中的数据。该方法可以返回一个对象来更新组件的状态。 下面是一个简单的错误边界的示例
import React, { Component } from react;class ErrorBoundary extends Component {constructor(props) {super(props);this.state { hasError: false };}// getDerivedStateFromError从错误信息中进行状态的浅合并更新。static getDerivedStateFromError(error) {// 更新 state 以显示备用 UIreturn { hasError: true };}componentDidCatch(error, info) {// 记录错误console.log(error, info);}render() {if (this.state.hasError) {// 显示备用 UIreturn h1Something went wrong./h1;}return this.props.children;}
}export default ErrorBoundary;在上面的示例中ErrorBoundary 组件包装了其子组件并提供了备用 UI。如果其中的任何子组件引发错误则会调用 componentDidCatch 生命周期方法并更新状态以显示备用 UI。
然后可以将 ErrorBoundary 组件包装在任何需要捕获错误异常的组件中
import React from react;
import ErrorBoundary from ./ErrorBoundary;function App() {return (divh1Hello, world!/h1ErrorBoundaryComponentThatMayThrowAnError //ErrorBoundary/div);
}在上面的示例中ComponentThatMayThrowAnError 组件可能会抛出错误因此将其包装在 ErrorBoundary 组件中以确保错误得到捕获和处理。
注意⚠️
1、错误边界可以捕获发生在整个子组件树的渲染期间、生命周期方法以及构造函数中的错误。
2、错误边界无法捕获以下场景中产生的错误
事件处理了解更多异步代码例如 setTimeout 或 requestAnimationFrame 回调函数服务端渲染它自身抛出来的错误并非它的子组件
3、错误边界的工作方式类似于 JavaScript 的 catch {}不同的地方在于错误边界只针对 React 组件。只有 class 组件才可以成为错误边界组件
4、错误边界仅可以捕获其子组件的错误它无法捕获其自身的错误。如果一个错误边界无法渲染错误信息则错误会冒泡至最近的上层错误边界这也类似于 JavaScript 中 catch {} 的工作机制。
5、React 不需要错误边界来捕获事件处理器中的错误。与 render 方法和生命周期方法不同事件处理器不会在渲染期间触发
6、如果你需要在事件处理器内部捕获错误使用普通的 JavaScript try / catch 语句。 函数组件中怎样进行错误异常捕获
在函数组件中可以使用useErrorBoundary hook来定义一个错误边界。它返回一个包含两个元素的数组错误状态和错误信息。当发生错误时错误状态会被设置为true错误信息会被更新为错误对象。
useErrorBoundary 是一个自定义的 React Hook用于在函数组件中捕获错误异常并处理。它的实现原理基于 React 的错误边界机制利用了 componentDidCatch 生命周期方法。
使用 useErrorBoundary 需要传入一个函数作为错误处理函数。当函数组件中发生错误时错误处理函数会被调用并传入错误对象。同时useErrorBoundary 会返回一个布尔值表示组件是否处于错误状态。
以下是一个简单的示例展示了如何使用 useErrorBoundary 捕获错误异常
import React, { useState } from react;function MyComponent() {const [count, setCount] useState(0);function handleClick() {setCount(count 1);if (count 2) {throw new Error(Something went wrong);}}function handleError(error) {console.error(error);}const [hasError, resetErrorBoundary] useErrorBoundary(handleError);return (div{hasError ? (divpSomething went wrong./pbutton onClick{resetErrorBoundary}Reset/button/div) : (divpCount: {count}/pbutton onClick{handleClick}Increment/button/div)}/div);
}在这个示例中当 count 的值等于 2 时会抛出一个错误异常。useErrorBoundary 会捕获这个异常并调用 handleError 函数进行处理。如果 hasError 的值为 true则说明组件处于错误状态可以通过 resetErrorBoundary 函数重置组件并清除错误状态。 2、浏览器中错误异常捕获
浏览器提供了一些方法来捕获 JavaScript 运行时的错误异常包括以下几种
try-catch语句用于捕获同步代码块中的错误异常。window.onerror用于捕获全局的错误异常包括语法错误、网络请求错误等但是无法捕获异步错误异常。window.addEventListener(error)用于捕获全局的错误异常包括语法错误、网络请求错误等但是无法捕获异步错误异常。window.addEventListener(unhandledrejection)用于捕获 Promise 中未被 catch 的错误异常。
下面是具体的示例