- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章React中巧妙实现Error Boundaries由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
大家好,我卡颂.
本文会讲解React中Error Boundaries的完整实现逻辑.
一张图概括:
这里简单讲解下React工作流程,后文有用。分为三步:
副作用有很多,比如:
好了,让我们进入主题.
提供了两个与「错误处理」相关的API:
使用了这两个API的ClassComponent通常被称为Error Boundaries(错误边界).
在Error Boundaries的「子孙组件」中发生的所有「React工作流程内」的错误都会被Error Boundaries捕获.
通过开篇的介绍可以知道,「React工作流程」指:
考虑如下代码:
A、B、C作为ErrorBoundary的子孙组件,当发生「React工作流程内」的错误,都会被ErrorBoundary中的componentDidCatch方法捕获.
首先来看「工作流程中的错误都是何时被捕获的」.
render阶段的核心代码如下,发生的错误会被handleError处理:
commit阶段包含很多工作,比如:
这些工作会以如下形式执行,发生的错误被captureCommitPhaseError处理:
可以发现,即使没有Error Boundaries,「工作流程」中的错误已经被React捕获了。而正确的逻辑应该是:
所以,不管是handleError还是captureCommitPhaseError,都会从发生错误的节点的父节点开始,逐层向上遍历,寻找最近的Error Boundaries.
一旦找到,就会构造:
React错误提示信息,包括提示语和错误堆栈 。
如果没有找到Error Boundaries,继续向上遍历直到根节点.
此时会构造:
构造好的callback在什么时候执行呢?
在React中有两个「执行用户自定义callback」的API:
所以,对于Error Boundaries,相当于主动触发了一次更新:
所以,对于「没有Error Boundaries」的情况,相当于主动执行了如下函数:
所以,Error Boundaries的实现可以看作是:React利用已有API实现的新功能.
经常有人问:为什么Hooks没有Error Boundaries?
可以看到,Error Boundaries的实现借助了this.setState可以传递callback的特性,useState暂时无法完全对标.
最后,给你留个作业,在官方文档[1]介绍了4种情况的错误不会被Error Boundaries捕获.
利用本文知识,你能分析下他们为什么不会被捕获么?
[1]官方文档
https://reactjs.org/docs/error-boundaries.html#introducing-error-boundaries 。
原文链接:https://mp.weixin.qq.com/s/pEBQdvZIP8I__CyloD9v6w 。
最后此篇关于React中巧妙实现Error Boundaries的文章就讲到这里了,如果你想了解更多关于React中巧妙实现Error Boundaries的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
在 HTML 表单中发布用于创建多部分边界的有效字符是什么? 最佳答案 根据 RFC 2046 ,第 5.1.1 节: boundary := 0*69 bcharsnospace bchars
大家好,我卡颂。 本文会讲解React中Error Boundaries的完整实现逻辑。 一张图概括: 这里简单讲解下React工作流程,后文有用。分为三步: 触发更新
我正在尝试编写我的第一个 Elasticsearch 分析插件,我从 github 上找到了一个可扩展标准分析器插件项目:elasticsearch-analysis-standardext ,在项目
我正在开发一款游戏,其中你是一个发射子弹的简单圆圈及其多人游戏等等。好吧,我试图让边界有点像你必须经历的迷宫类型的东西,我尝试过这样的碰撞检测: public void checkCollisions
我想设置一个模式,该模式将找到一个受第一次出现的“边界”限制的捕获组。但是现在使用最后一个边界。 例如: String text = "this should match from A to the
我想根据旋转矩阵计算欧拉角,以便找出与该旋转关联的方向。为此,我正在使用 MATLAB 和函数 rotm2eul,它首先提供关于 x 轴的旋转,然后是关于 y 轴的旋转,最后是关于 z 轴的旋转。 我
这个问题已经有答案了: No out of bounds error (7 个回答) 已关闭 7 年前。 在下面的代码中,我已将值分配给超出数组边界的数组元素,在 CLI 的 Linux 环境中,代码
我尝试使用 Python 请求模块将一些数据和文件发送到我的 django rest 应用程序,但出现以下错误。 raise MultiPartParserError('Invalid bou
我正在尝试为我玩的游戏开发一个在线 map 编辑程序。 map 的数据有点大。如果我发送每个方格的数据,中等大小 map 的数据接近 1 mb。 我认为我可以做的是在 map 上找到边界并以此为基础创
“Android 设计”网站推荐可 ScrollView 的“边界反馈”。 http://developer.android.com/design/style/touch-feedback.html
引用此 post 中给出的最佳答案,我注意到当 rnd=sum_of_weight 时,它在边界情况下失败。解决方法是在 [0,sum_of_weight) 中生成随机数,但是我想知道为什么代码对于这
在多部分(即 Content-Type=multipart/form-data)形式中,HTTP 服务器应该接受的边界字符串的长度是否有上限? 据我所知,相关的 RFC 说 70 个字符: RFC26
我有一串任意字符,其中一些是数字。我想将字符串分成由数字和非数字组成的字段。例如,如果我的字符串的值为 'abc34d-f9',我想得到一个数组 ['abc','34','d-f','9'] 我快到了
我正在尝试创建有关 Scooter 系统的用例图。我已经创建了图表,你可以在这里找到它: Use Case Diagram : 我收到了一些关于这张图的评论: 系统(或滑板车供应商)不是 Actor
我正在尝试从桌面上传图像,但找不到多部分边界的错误。如何设置上传图片的边界?第一次上传图片,请指教。 用户上传图片时的html事件监听 document.getElementById('image-f
我在发送带有文本附件的电子邮件时遇到问题(没有附件,一切都很好)。我正在使用 actionmailer 3.2.11 并尝试通过 Amazon SES 发送电子邮件。在我看来,亚马逊 snmp 服务器
来自 Akka 文档,Pipelining and Parallelism Akka Streams processing stages (be it simple operators on Flow
有一个 DAL 库公开了十几个存储库。每个实体一个存储库。有 PersonRepository 和 PhotoRepository。 当我向存储库添加新方法并且方法处理实体时,很明显我必须将它放在哪里
引用:perl string catenation and substitution in a single line? 给定输入: home/////test/tmp/ 以及所需的转换为: /hom
我有一个看起来像这样的大文件: V1 SNP1 SNP2 SNP3 SNP4 SNP5 SNP6 SNP7 SNP8 SNP9 GROUP1 1 NA 2 1 1
我是一名优秀的程序员,十分优秀!