当前位置: 首页 > 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.xdnf.cn/news/1318213.html

相关文章:

  • Linux系统分析 CPU 性能问题的工具汇总
  • STM32学习笔记13-通信协议I2CMPU6050
  • 海洋牧场助力可持续发展,保护海洋生态平衡
  • C语言学习笔记之文件操作
  • 基于Vue的个人博客网站的设计与实现/基于node.js的博客系统的设计与实现#express框架、vscode
  • 网络原理与编程实战:从 TCP/IP 到 HTTP/HTTPS
  • C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
  • 01数据结构-插入排序
  • 如何让AI视频模型(如Veo)开口说中文?一个顶级提示词的深度拆解
  • RabbitMQ入门:生产者和消费者示例
  • 44.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成认证(三)
  • 一起Oracle 19c bug 导致的业务系统超时问题分析
  • 锂电池SOH预测 | Matlab基于KPCA-PLO-Transformer-LSTM的的锂电池健康状态估计(锂电池SOH预测),附锂电池最新文章汇集
  • Linux中聚合链路与软件网桥配置指南
  • java理解
  • 使用 Python 的 `cProfile` 分析函数执行时间
  • 如何做HTTP优化
  • 计算机毕设选题推荐-基于大数据的全面皮肤病症状数据可视化分析系统【Hadoop、spark、python】
  • 【LLM】文献阅读-ISOLATE GPT:基于大语言模型的执行隔离架构
  • 自然语言处理NLP---预训练模型与 BERT
  • rt-thread audio框架移植stm32 adc+dac,对接cherryusb uac,进行录音和播放
  • 软件需求规格说明书
  • 评测系统构建
  • 43.安卓逆向2-补环境-使用unidbg(使用Smali语法调用方法和使用方法地址调用方法)
  • 问津集 #5:Crystal: A Unified Cache Storage System for Analytical Databases
  • LangChain 多任务应用开发
  • 向量数据库基础和实践 (Faiss)
  • PyCharm与前沿技术集成指南:AI开发、云原生与大数据实战
  • 【FreeRTOS】刨根问底6: 应该如何防止任务栈溢出?
  • linux中已经启用的命令和替代命令