了解:
谬误边界(Error boundary):用来捕捉后辈组件谬误,渲染出备用页面
特点:
只能捕捉后辈组件生命周期产生的谬误,不能捕捉本人组件产生的谬误和其余组件在合成事件、定时器中产生的谬误
应用形式:
getDerivedStateFromError 配合 componentDidCatch
// 生命周期函数,一旦后盾组件报错,就会触发static getDerivedStateFromError(error) { console.log(error); // 在render之前触发 // 返回新的state return { hasError: true, };}// 渲染组件出错,会调用这个生命周期函数componentDidCatch(error, info) { // 统计页面的谬误。发送申请到后盾去,配合后盾产生对应的谬误反馈机制,比方邮件或者短信告诉 console.log(error, info);}
示例:
export default class Parent extends Component { state = { hasError: '' //用于标识子组件是否产生谬误 } //当Parent的子组件呈现报错时候,会触发getDerivedStateFromError调用,并携带错误信息 static getDerivedStateFromError(error) { console.log('@@@', error) return { hasError: error } } componentDidCatch() { console.log('此处统计谬误,反馈给服务器,用于告诉编码人员进行bug的解决') } render() { return ( <div> <h2>我是Parent组件</h2> // 能够应用用户心理学办法,网络不稳固等揭示形式 {this.state.hasError ? <h2>以后网络不稳固,稍后再试</h2> : <Child />} </div> ) }}class Child extends Component { state = { users: [ { id: '001', name: 'tom', age: 18 }, { id: '002', name: 'jack', age: 19 }, { id: '003', name: 'peiqi', age: 20 } ] } render() { return ( <div> <h2>我是Child组件</h2> {this.state.users.map(userObj => { return ( <h4 key={userObj.id}> {userObj.name}----{userObj.age} </h4> ) })} </div> ) }}