React-错误边界与组件通信方式概述

2023-11-18

错误边界

错误边界(Error boundary):用来捕获后代组件错误,渲染出备用页面。

注意:只在生产环境(项目上线)起效

特点:

  • 只能捕获后代组件生命周期产生的错误,不能捕获自己组件产生的错误和其他组件在合成事件、定时器中产生的错误
  • 简单理解就是只能捕获后代组件生命周期钩子里面代码的错误
import React, { Component } from 'react'
import Child from './Child'

export default class Parent extends Component {
  state = {
    //用于标识子组件是否产生错误
    hasError: '',
  }

  // 当子组件出现错误,会触发调用,并携带错误信息
  static getDerivedStateFromError(error) {
    // render 之前触发
    // 返回新的 state
    return { hasError: error }
  }

  componentDidCatch(error, info) {
    console.log(error, info)
    console.log('此处统计错误,反馈给服务器')
  }

  render() {
    return (
      <div>
        <h2>Parent组件</h2>
        {this.state.hasError ? <h2>网络不稳定,稍后再试</h2> : <Child />}
      </div>
    )
  }
}

注意

错误边界目前只在 Class Component 中实现了,没有在 hooks 中实现(因为Error Boundaries的实现借助了this.setState可以传递callback的特性,useState无法传入回调,所以无法完全对标);

错误边界 无法捕获 以下四种场景中产生的错误:

  • 事件处理函数(因为 Error Boundaries 实现的本质是触发更新,但是事件处理函数不在render或者commit阶段,所以无法进行捕获,如果你需要在事件处理器内部捕获错误,可以使用原生的 try / catch 语句)
  • 异步代码(例如 setTimeoutrequestAnimationFrame 回调函数)
  • 服务端渲染(因为触发更新只能在客户端进行,不能在serve端进行)
  • 它自身抛出来的错误(因为错误抛出要向父节点冒泡寻找 Error Boundaries 处理,无法处理自身产生的错误)

组件通信方式总结

推荐搭配:

  • 父子组件:props
  • 兄弟组件:消息订阅-发布、集中式管理
  • 祖孙组件(跨级组件):消息订阅-发布、集中式管理、conText(开发用的少,封装插件用的多即 React-Redux)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React-错误边界与组件通信方式概述 的相关文章

  • 如何理解 Angular JS 中的控制台错误消息?有什么工具吗?

    我是 Angular JS 的新手 我的第一个问题是如何理解 Angular JS 中控制台的错误消息 我编写了这段用于匹配密码的代码片段 它在控制台上抛出错误 但它工作正常 它是有线的 我无法从这些控制台消息中理解任何内容 谁能指出我为什
  • 如何使用键盘和鼠标控制相机 - Three.js

    我在 WEB GL 中有一个带有 Three js 的 3D 环境 并且我曾经使用 Orbitcontrols js http codepen io nireno pen cAoGI http codepen io nireno pen c
  • Twisted 的 Deferred 和 JavaScript 中的 Promise 一样吗?

    我开始在一个需要异步编程的项目中使用 Twisted 并且文档非常好 所以我的问题是 Twisted 中的 Deferred 与 Javascript 中的 Promise 相同吗 如果不是 有什么区别 你的问题的答案是Yes and No
  • Ext JS - 如何滚动到文本区域的底部

    这是我下面的代码 如何滚动到文本区域的底部 它一定是类似的东西 Ext getCmp output setScrollPosition Ext getCmp output getScrollHeight 这是我的文本区域代码 var myW
  • 使用 Javascript 在 Imacros 中循环

    我如何使用 javascript 循环 imm imacros 脚本 我搜索了一下 发现了这个 for i 0 i lt n i iimPlay marconame iim 但当我使用它时 我的浏览器 Firefox 18 挂起 for i
  • 计算Javascript中两次点击之间的时间

    我想用 javascript 计算属性的两次点击之间的时间 但我不知道如何 例如 a href click here a 如果用户单击多次 假设 5 秒内 我想显示警报 如果有帮助的话我正在使用 jQuery 我对 javascript 不
  • 在 BIRT 中输入参数后更新数据集查询

    在 BIRT 报告设计中传递参数后 如何更改或更新数据集的查询 详细说明 我有一个如下所示的查询 WHERE 该参数标记可以保存不同的值 在用户输入参数后 它看起来像这样 例如 WHERE column name 1 or WHERE co
  • 禁用 JavaScript 中的右键单击

    当我尝试禁用右键单击时 它不起作用 我尝试使用下面的代码 document onclick function e console log e button if e button 2 e preventDefault return fals
  • 何时不使用承诺[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在阅读了数十篇关于 es6 Promise 有多伟大以及为什么我们应该实现它们的文章之后 我有这样的感觉 ALL我的 不平凡的 JavaScri
  • 创建 Cookie 时需要帮助

    我有一个名为yes和另一个名叫no
  • 在 MVC Razor 中的 C# 和 Javascript 之间共享常量

    我想在服务器上的 C 和客户端上的 Javascript 中都使用字符串常量 我将常量封装在 C 类中 namespace MyModel public static class Constants public const string
  • 保存/导出Chrome的JavaScript控制台输入历史记录

    无论如何 我可以保存或导出 JavaScript 控制台的历史记录吗 input 控制台历史记录 在 Google Chrome 中 我不想保存输出或错误 因此将鼠标悬停在控制台框上 右键单击并选择Save as 不是解决方案 我不想每次都
  • AJAX:检查字符串是否为 JSON?

    我的 JavaScript 有时会在这一行崩溃 var json eval this responseText 当争论时会导致崩溃eval 不是 JSON 在进行此调用之前有什么方法可以检查字符串是否为 JSON 我不想使用框架 有什么方法
  • 使用 jquery 将字符串数组转换为整数

    我正在尝试将 jquery 中的字符串数组转换为整数数组 这是我的尝试 var cdata data values split each cdata function i l l parseInt l 我认为在这种情况下你不需要使用 Jqu
  • 在vscode中使用reactjs报错

    在 Visual Studio 代码中使用 jsx 语法 Visual Studio代码报错 请帮我 谢谢 符号 例如 而不是这样做 return lt button className square gt TODO lt button g
  • 有关于 PHP 中的 V8JS 的文档吗?

    有没有关于V8JS的文档 我是否只需要标准 PHP 或一些扩展即可使用 V8JS 我将非常感谢有关 PHP 中的 V8JS 的任何信息 要求 PHP 5 3 3 和 V8 库和标头安装在正确的路径中 Install http www php
  • 如何将React版本17降级到16?

    由于 React 17 不支持许多 React 包 如何将 React 版本从 17 降级到 16 假设您使用 npm yarn 或其他节点包管理器 依赖项版本列在package json 搜索react and react dom包下de
  • ng-model 和值组合不适用于输入文本框

    我有两个输入文本框 我需要组合在两个文本框中输入的值并将其显示在第三个文本框中 如果我只使用value在第三个文本框中 Box 1
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方
  • 如何在 SVG 元素上使用箭头标记?

    我需要在 d3 js 中创建一个箭头 但我找到的只是带有节点图的示例 我需要的是简单地制作一个从 A 点到 B 点的箭头 我尝试实现以下示例中的部分代码 http bl ocks org 1153292 http bl ocks org 1

随机推荐

  • 通讯录管理系统C语言链表实现

    本程序采用链表的方式可以实现对于通讯录信息的管理操作主要有增 删 改 查 显示全部信息 退出六个功能 代码注释都有逻辑简单易懂适合初学者进行链表的学习 代码如下 include
  • 全新范式

    在本文中提出了一种简单的注意力机制Box Attention 它支持网格特征之间的空间交互 从感兴趣的Box中采样 并提高了Transformer针对多个视觉任务的学习能力 具体来说 介绍的BoxeR 即Box Transformer的缩写
  • CNN:Windows下编译使用Caffe和Caffe2

    用于检测的CNN分为基于回归网络的方法和基于区域 CNN网络的方法 其中基于回归网络的方法典型为YOLO9000 可以兼容使用VGG Net框架 其中基于区域 CNN网络方法 大量使用了Caffe作为基础CNN框架 准备工作 python2
  • 安装nedo.js 'npm'不是内部或外部命令,也不是可运行的程序 或批处理文件

    npm 不是内部或外部命令 也不是可运行的程序 或批处理文件 问题 没有npm命令需要按需node js npm 不是内部或外部命令 也不是可运行的程序 或批处理文件 一 下载安装node js nodejs官网 https nodejs
  • Spring Boot Metrics使用

    Spring Boot 使用Metrics监控 导入pom依赖
  • 2021年第八届大唐杯全国大学生移动通信5G技术大赛省赛

    2021年第八届大唐杯全国大学生移动通信5G技术大赛省赛 实验背景 勘站规划 网络部署 开通调测 业务认证摘自 https www bilibili com video BV1Hr4y1Y7m8 spm id from 333 337 se
  • vue+$emit调用父级方法,添加其他参数

    前言 我们在vue中子组件调用父组件的方法使用的是this emit 方法名 参数 但是在某些特定场合 我们还希望可以在父组件那里添加其他参数 实现方法
  • 新手学习Python要注意的13个问题

    作为一门易学的编程语言 Python对初学者来说确实是一个非常好的选择 不过 初学者在学习Python的过程中可能会遇到一些常见的问题 以下是一些常见的Python学习问题 语法错误 语法错误是最常见的问题之一 初学者经常会忘记冒号 括号
  • llvm之IR设计

    llvm之IR设计 引言 1 逻辑关系 2 class Module 3 class IRBuilder 4 class Instruction 5 class Constant 6 class Function 引言 llvm IR是ll
  • v-if与v-show的区别=====》面试题

    共同点 都是控制元素显示或隐藏的指令 区别 v show 控制元素无论是true还是false都会被渲染出来 通过diaplay none控制元素隐藏 v if控制元素是true渲染 是false不渲染 在dom树结构中不显示 加分回答 应
  • [STM32系列]一、HAL库的串口中断接收

    STM32系列 一 HAL库的串口中断任意长度接收 1 前言 2 回调函数 3 HAL库中断接收函数使用 1 前言 HAL即硬件抽象层 英语 Hardware Abstraction Layer 实现了不同硬件的统一接口操作 这就极大的简化
  • 极简Json格式剖析与fastjson下载和使用

    Json存在的意义 Json主要用来做数据的传输 例如发送java中的一个对象 由于对象是存储在内存里的 不能直接将内存里的对象发送出去 这时需要使用序列化 持久化 手段 将对象转换为一系列字符串 比如说Json 在字符串送达目的地时再使用
  • HTTP协议和Tomcat服务器

    目录 1 HTTP 是什么 2 HTTP 工作过程 2 1 HTTP 协议格式 2 1 1 抓包工具的使用 2 1 2 抓包工具原理 2 1 3 抓包结果分析 2 1 4 协议格式总结 3 HTTP 请求 Request 3 1 请求地址
  • 常用的数组方法整理

    常用的数组方法 1 concat 2 join 3 pop 4 shift 5 unshift 7 reverse 8 sort 9 slice 10 splice 11 toString 12 valueOf 13 IndexOf 14
  • 二、Vue3跨组件调用函数[mitt]

    一 跨组件调用函数 安装 npm install mitt 创建文件并写入 bus js import mitt from mitt export const eventBus mitt 使用方法 import eventBus from
  • 2022年6月8日STM32——SPI读写串行FLASH 和 串行FLASH文件系统FatFs

    此内容是为自己方便回忆 如有错误 欢迎指导 内容来源于野火指南者开发板教程 一 SPI读写串行FLASH SPI Serial Peripheral Interface 串行外围设备接口 是高速全双工的通信总线 通讯速率较高 SPI物理层
  • VS2019中文输出乱码解决方法(C语言)

    现象 VS2019控制台输出中文乱码 第一种解决方法 安装插件Format on Save重启VS2019生效 注意 别装错了 刚开始我就装错了这个UTF 8 No BOM 装了这个插件的同学 记得要删掉 不然还是会出现问题 第二种解决方法
  • 等价类

    动态测试方法是指通过运行被测程序 检查运行结果与预期结果的差异 并分析运行效率 正确性和健壮性等性能 这种方法由三部分组成 构造测试用例 执行程序 分析程序的输出结果 静态方法是指不运行被测程序本身 仅通过分析或检查源程序的语法 结构 过程
  • 无线通信原理之OFDM技术

    补充一个完整的OFDM系统结构图 包括收发天线 目录 1 OFDM的基本原理 2 OFDM系统模型 3 循环前缀和导频 4 OFDM系统参数 1 OFDM的基本原理 OFDM即正交频分复用 Orthogonal Frequency Divi
  • React-错误边界与组件通信方式概述

    错误边界 错误边界 Error boundary 用来捕获后代组件错误 渲染出备用页面 注意 只在生产环境 项目上线 起效 特点 只能捕获后代组件生命周期产生的错误 不能捕获自己组件产生的错误和其他组件在合成事件 定时器中产生的错误 简单理