PHP编程在线学习平台, 提供PHP教程、PHP入门教程、PHP视频教程及源码下载

网站首页 > 文章精选 正文

React 基础:组件异常捕获——错误边界

xinche 2024-09-21 19:40:53 文章精选 8 ℃ 0 评论


前言

近年前端技术层出不穷,React 也是程序员间讨论最多的 Javascript 框架之一。借这个机会开始学习 React,并把笔记作为 React 基础教程系列(参考 React 官网)。

因为属于入门,不太适合对 React 有经验的同学,但希望到此的同学多少都有所收获。

概要

官网说明:

部分 UI 的 JavaScript 错误不应该导致整个应用崩溃,为了解决这个问题,React 16 引入了一个新的概念 —— 错误边界。

错误边界也是 React 组件,并且有两个作用:

  1. 捕获子组件中的错误
  2. 当发生问题时,渲染备用 UI

示例

下面示范"错误边界"的用法:

模拟一个组件出现错误,强制 throw 抛出 Error 对象:

父组件 Clock 的 JSX 中,引用子组件 Error :

实现 getDerivedStateFromError 方法,将 error 交给 state 状态对象:

当 state 更新后,将重新触发 render 方法,从而执行到 if 逻辑,渲染出降级的 UI 内容:

当然也可以通过 componentDidCatch 方法显示更多的错误信息:

页面 HTML 效果图:

父组件 Clock 是个定时器组件,而子组件 Error 指定时间后会抛出错误,最后被 Clock 组件接收到,渲染降级 UI。

相关 API

  • static getDerivedStateFromError()
  • componentDidCatch()
  • getDerivedStateFromError() 会处理有关 error 信息,然后 return 的结果交给组件的状态对象 state 。

    错误信息示意:

    componentDidCatch() 具备更多错误的信息,就如官方建议,可以把错误日志上报给服务器,以便排查问题。

    错误信息示意:


    总结

    以上就是关于 React 错误边界中,getDerivedStateFromError 以及 componentDidCatch 用法示例。

    反问 Vue 是否有类似的方法呢?

    答案也是有的,你也可以在 Vue 对应的 API 章节中找到:

    errorHandler errorCaptured 分别可以在全局范围和组件内使用,用于异常的捕获。(我居然一次都没用过,幸好 React 把这块概念单独领了出来,让我再次温习了下)

    为了更好的阅读体验,可以在文章底下的“了解更多”中查看原文

    Tags:

    本文暂时没有评论,来添加一个吧(●'◡'●)

    欢迎 发表评论:

    请填写验证码
    最近发表
    标签列表
    最新留言