使用错误边界处理React中错误的最佳实践
当使用一个组件时,如果该组件代码内部发生任何错误,React将卸载整个React组件树,渲染没有。这是处理崩溃的React方法。
您不希望错误显示给您的用户。 React决定显示一个空白页。
但是,这只是默认设置。显示空白页仅比向用户显示隐秘消息更好,但是您应该有更好的方法。
如果您处于开发模式,则任何错误都将触发详细的堆栈跟踪信息,打印到浏览器DevTools安慰。但是,当然不在生产环境中,您实际上并不希望向用户打印错误。
在生产中,您应该拦截错误,并向使用该应用的人员显示某种有用的信息。
这是哪里错误边界参加进来。
通过错误边界,您可以隔离应用程序的各个部分并在本地处理错误。
错误边界是一个React组件,它实现了componentDidCatch()
生命周期事件,并包装其他组件:
class ErrorHandler extends React.Component {
constructor(props) {
super(props)
this.state = { errorOccurred: false }
}
componentDidCatch(error, info) {
this.setState({ errorOccurred: true })
logErrorToMyService(error, info)
}
render() {
return this.state.errorOccurred ? <h1>Something went wrong!</h1> : this.props.children
}
}
在组件JSX中,您可以像这样使用它:
<ErrorHandler>
<SomeOtherComponent />
</ErrorHandler>
内部发生错误时SomeOtherComponent
或其他子组件,以及它们所拥有的整个组件子树中,ErrorHandler
将要拦截它,并且您可以优雅地处理该错误。
在上述情况下,受React官方文档的启发,我们有一个errorOccurred
状态属性,当设置为true时,将使接口呈现错误处理UI,否则将呈现常规应用程序UI树。
里面componentDidCatch()
,它接收2个描述错误的参数,我们也将其称为logErrorToMyService()
这只是一些功能的存根,该功能使用的服务如Sentry,Roller,Airbrake或其他可以很好地记录错误以供您查看的服务,因此您不必依赖用户告诉您存在错误来注意一个问题。
免费下载我的反应手册
更多反应教程:
- 一个React简单的应用示例:通过API获取GitHub用户信息
- 用React构建一个简单的计数器
- 用于React开发的VS代码设置
- 如何通过React Router将道具传递给子组件
- 使用Electron和React创建一个应用
- 教程:使用React创建电子表格
- 学习React的路线图
- 了解如何使用Redux
- JSX入门
- 样式化的组件
- Redux Saga简介
- React Router简介
- React简介
- 反应组件
- 虚拟DOM
- 反应事件
- 反应状态
- 反应道具
- 反应片段
- React Context API
- 反应PropTypes
- 反应概念:声明式
- React:如何在点击时显示其他组件
- 如何在React JSX内部循环
- 道具与状态在React中
- 您应该使用jQuery还是React?
- 使用React需要知道多少JavaScript?
- 盖茨比介绍
- 如何在React中引用DOM元素
- React中的单向数据流
- 反应高阶组件
- 反应生命周期事件
- 反应概念:不变性
- 反应概念:纯度
- React钩子简介
- create-react-app简介
- 反应概念:组成
- React:演示组件与容器组件
- React中的代码拆分
- 使用React进行服务器端渲染
- 如何安装React
- React中的CSS
- 在React中使用SASS
- 在React中处理表单
- 反应严格模式
- 反应门户
- 反应渲染道具
- 测试React组件
- 如何在React中将参数传递给事件处理程序
- 如何处理React中的错误
- 如何在JSX中返回多个元素
- React中的条件渲染
- 反应,如何将道具转移到子组件
- 如何在React中获取输入元素的值
- 如何使用useState React钩子
- 如何使用useCallback React钩子
- 如何使用useEffect React钩子
- 如何使用useMemo React钩子
- 如何使用useRef React钩子
- 如何使用useContext React钩子
- 如何使用useReducer React钩子
- 如何将您的React应用程序连接到相同来源的后端
- 到达路由器教程
- 如何使用React Developer Tools
- 如何学习React
- 如何调试React应用程序
- 如何在React中呈现HTML
- 如何修复`dangerouslySetInnerHTML`与React中的错误不匹配
- 我如何解决React登录表单状态和浏览器自动填充的问题
- 如何在本地主机上的React应用程序中配置HTTPS
- 如何修复React中的“渲染其他组件时无法更新组件”错误
- 我可以在条件内使用React挂钩吗?
- 将useState与对象一起使用:如何更新
- 如何使用React和Tailwind在代码块中移动
- React,添加到DOM时将焦点放在React中的一个项目上
- 反应,在doubleclick上编辑文本