了解什么是错误边界
1 错误边界(Error Boundaries)
1.错误边界是一种 React 组件,这种组件可以捕获并打印发生在其子组件树任何位置的 JavaScript 错误,并且,它会渲染出备用 UI,而不是渲染那些崩溃了的子组件树。错误边界在渲染期间、生命周期方法和整个组件树的构造函数中捕获错误。
2.错误边界无法捕获以下场景中产生的错误:事件处理、异步代码(例如 setTimeout )、服务端渲染、它自身抛出来的错误(并非它的子组件)
2 小案例测试
有一个Parent组件以及Child组件,Child组件用来渲染用户列表,在Parent组件中使用错误边界。如果Child组件出错了就显示备用的界面,否则显示Child组件。
在Parent组件中使用static getDerivedStateFromError()
class Parent extends PureComponent {
state = {
hasError: false
}
//当Parent的子组件发生错误时,会调用getDerivedStateFromError函数,并携带错误信息
static getDerivedStateFromError(error){
console.log(error)
return {
hasError: true
}
}
render() {
const {hasError} = this.state
return (
<div className="parent">
<h1>我是Parent组件</h1>
{hasError ? <h4>网络繁忙,请稍后再试</h4> : <Child></Child>}
</div>
);
}
}
class Child extends PureComponent {
state = {
// userList: [
// {
// id: '001',
// name: 'lx',
// age: 18
// },{
// id: '002',
// name: 'xinxin',
// age: 18
// }
// ],
userList: ''
}
render() {
const {userList} = this.state
console.log('A render',this.props)
return (
<div className="child">
<h1>我是Child组件</h1>
<ul>
{
userList.map((item)=>{
return (
<h3 key={item.id}>{item.name} --------{item.age}</h3>
)
})
}
</ul>
</div>
);
}
}
如果在开发环境中还是会显示错误,适合用于在生产环境中。
另外,可以在Parent.jsx中使用componentDidCatch(),将错误日志上报给服务器。
class Parent extends PureComponent {
state = {
hasError: false
}
//当Parent的子组件发生错误时,会调用getDerivedStateFromError函数,并携带错误信息
static getDerivedStateFromError(error){
console.log(error)
return {
hasError: true
}
}
componentDidCatch(error,info){
//可以用来统计错误次数,然后发送给后台,用来通知编码人员解决bug
console.log('渲染组件时出错')
console.log(error,info)
}
render() {
const {hasError} = this.state
return (
<div className="parent">
<h1>我是Parent组件</h1>
{hasError ? <h4>网络繁忙,请稍后再试</h4> : <Child></Child>}
</div>
);
}
}
- 本文作者: étoile
- 版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!