当前位置: 首页 > news >正文

react 错误边界

注意点:

  1. 类组件是可以和函数式组件混合写的!!!
  2. getDerivedStateFromError是静态的,避免副作用,如果想将错误上报到服务器,则去componentDidCatch里去处理。
  3. getDerivedStateFromError直接返回{ hasError: true, errorInfo: error },即可修改当前错误边界组件的 state,从而达到控制显示内容的效果
  4. 错误边界不捕捉以下错误
  • 事件处理程序(了解更多
  • 异步代码(例如 setTimeout 或 requestAnimationFrame 回调)。
  • 服务器端的渲染
  • 在错误边界本身(而不是其子女)中抛出的错误

import { Store } from 'antd/es/form/interface';
import React from 'react';function Bomb({ username }) {console.log('username', username);if (username === 'bomb') {throw new Error('💥 CABOOM 💥');}return <div>{`Hi ${username}`}</div>;
}import { Component } from 'react';class MyErrorBoundary extends Component {constructor(props: any) {super(props);this.state = {hasError: false,errorInfo: null,};}componentDidMount(): void {console.log('this.props', this.props);}componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {// 在这里可以做错误收集、打印、掉接口上报console.log('MyErrorBoundary   _________   componentDidCatch   error,errorInfo',error,errorInfo,);}static getDerivedStateFromError(error: Error) {console.log('MyErrorBoundary   _________   getDerivedStateFromError   error,errorInfo', error);return { hasError: true, errorInfo: error };}render() {const { hasError, errorInfo } = this.state;return (<div style={{ border: '2px solid pink' }}>这里是我自定义的错误边界{hasError ? (<div><h2>Something went wrong!!!!!</h2><pre style={{ color: 'pink' }}>{errorInfo.message}</pre></div>) : (this.props.children)}</div>);}
}function App() {const [username, setUsername] = React.useState('');const usernameRef = React.useRef(null);return (<div><label>{`Username (don't type "bomb"): `}<inputplaceholder={`type "bomb"`}value={username}onChange={(e) => setUsername(e.target.value)}ref={usernameRef}/></label><div><MyErrorBoundary><Bomb username={username} /></MyErrorBoundary></div></div>);
}export default App;

在这里插入图片描述

http://www.lryc.cn/news/623862.html

相关文章:

  • git stash临时保存工作区
  • Win11 文件资源管理器预览窗格显示 XAML 文件内容教程
  • 【牛客刷题】成绩统计与发短信问题详解
  • 【Git系列】如何从 Git 中删除 .idea 目录
  • 【线程安全(二) Java EE】
  • 寻找数组的中心索引
  • 如果用ApiFox调用Kubernetes API,需要怎么设置证书?
  • Day16 多任务(2)
  • USB-A 3.2 和 USB-A 2.0的区别
  • Day27 装饰器
  • 从零配置YOLOv8环境:RTX 3060显卡完整指南
  • AI评测的科学之道:当Benchmark遇上统计学
  • 48.Seata认识、部署TC服务、微服务集成
  • [Responsive theme color] 动态更新 | CSS变量+JS操控 | 移动端-汉堡菜单 | 实现平滑滚动
  • 实现用户输入打断大模型流式输出:基于Vue与FastAPI的方案
  • GaussDB 数据库架构师修炼(十三)安全管理(5)-全密态数据库
  • 【每日一题】Day 6
  • 凸函数与损失函数
  • 开源数据发现平台:Amundsen Search Service 搜索服务
  • Python注解
  • 零墨云A4mini打印机设置电脑通过局域网络进行打印
  • C#对象的本地保存与序列化详解笔记
  • GitLab CI/CD、Jenkins与GitHub Actions在Kubernetes环境中的方案对比分析
  • 【Golang】:错误处理
  • 任务型Agent架构简介
  • Visual Studio Code 基础设置指南
  • 【R语言】R 语言中打印含有双引号的字符串时会出现 “\” 的原因解析
  • GaussDB常用术语缩写及释义
  • 路由器配置之模式
  • 4.Ansible自动化之-部署文件到主机