博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于react16.4——错误边界
阅读量:6040 次
发布时间:2019-06-20

本文共 1490 字,大约阅读时间需要 4 分钟。

  过去,组件内的 JavaScript 错误常常会破坏 React 内部状态,并导致它在下一次渲染时产生神秘的错误。这些错误总会在应用代码中较早的错误引发的,但 React 并没有提供一种方式能够在组件内部优雅地来处理,也不能从错误中恢复。

  部分 UI 中的 JavaScript 错误不应该破坏整个应用程序。为了解决 React 用户的这个问题,React 16引入了一个 “错误边界(Error Boundaries)” 的新概念。

错误边界是 React 组件,它可以 在子组件树的任何位置捕获 JavaScript 错误,记录这些错误,并显示一个备用 UI ,而不是使整个组件树崩溃。 错误边界(Error Boundaries) 在渲染,生命周期方法以及整个组件树下的构造函数中捕获错误。

如果一个类组件定义了一个名为 componentDidCatch(error, info): 的新生命周期方法,它将成为一个错误边界:

componentDidCatch的参数:

error 是被抛出的错误。

info 是一个含有 componentStack 属性的对象。这一属性包含了错误期间关于组件的堆栈信息。

class ErrorBoundary extends React.Component {  constructor(props) {    super(props);    this.state = { hasError: false };  }  componentDidCatch(error, info) {
this.setState({ hasError: true }); logErrorToMyService(error, info); } render() { if (this.state.hasError) { // You can render any custom fallback UI return

Something went wrong.

; } return this.props.children; }}

然后你可以像一个普通的组件一样使用,

componentDidCatch() 方法机制类似于 JavaScript catch {},但是针对组件。仅有类组件可以成为错误边界。

但是错误边界 无法 捕获事件处理器内部的错误。因此,如果你需要在事件处理器内部捕获错误,使用普通的 JavaScript try / catch 语句:

class MyComponent extends React.Component {  constructor(props) {    super(props);    this.state = { error: null };  }  handleClick = () => {    try {      // ...    } catch (error) {      this.setState({ error });    }  }  render() {    if (this.state.error) {      return 

Caught an error.

} return
Click Me
}}

 

转载于:https://www.cnblogs.com/zyl-Tara/p/9719044.html

你可能感兴趣的文章
【luogu 1908】逆序对
查看>>
pthread_create线程创建的过程剖析(转)
查看>>
android存储访问框架Storage Access Framework
查看>>
周总结
查看>>
Spring Boot 要点--启动类和热部署
查看>>
Maven配置及本地仓库设置
查看>>
PAT L2-001 紧急救援 —— (多参数最短路)
查看>>
JDK(java se development kit)的构成
查看>>
数据库的备份与恢复
查看>>
Android示例程序剖析之记事本(一)
查看>>
为什么英雄难过美人关?
查看>>
poj 3009 Curling 2.0
查看>>
Tomcat7安装配置 for Ubuntu
查看>>
Linux:命令执行控制&&与||
查看>>
麻球繁衍
查看>>
FreeRTOS栈溢出检查
查看>>
linux下,远程连接mysql
查看>>
浅谈js闭包(closure)
查看>>
【regex】POSIX标准正则表达式库
查看>>
C#集成FastReport.Net并将模板保存到数据库
查看>>