Reactjs 错误边界是ReactJS 16一个新的特性。它可以让我们在组件内部,通过生命周期函数来捕获JavaScript错误。错误边界能够捕获组件树内一个未被捕获的JavaScript异常,并且在渲染发生错误时,提供优雅的兜底方案,而不是整个组件树崩溃。
Reactjs 错误边界是ReactJS 16一个新的特性。它可以让我们在组件内部,通过生命周期函数来捕获JavaScript错误。错误边界能够捕获组件树内一个未被捕获的JavaScript异常,并且在渲染发生错误时,提供优雅的兜底方案,而不是整个组件树崩溃。
创建错误边界
创建错误边界非常简单,只需创建一个类实现 componentDidCatch
方法即可。
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
componentDidCatch(error, info) {
// 将错误捕获记录到日志中
logErrorToMyService(error, info);
this.setState({ hasError: true });
}
render() {
if (this.state.hasError) {
// 组件错误处理逻辑
return <h1>出现错误,请稍后重试。</h1>;
}
return this.props.children;
}
}
使用上述方式创建错误边界后,只需要将需要进行错误边界捕获的组件包裹在 <ErrorBoundary>
组件中即可。
<ErrorBoundary>
<MyWidget />
</ErrorBoundary>
错误边界的限制
- 错误边界无法捕获以下场景中的错误:事件处理程序、异步代码、服务端渲染、它自身抛出来的错误(即没有从下层组件中抛出任何错误)。
示例说明一:基本使用
下面是一个简单示例,通过错误边界组件包裹了一个可能抛出错误的组件,当该组件抛出错误时,错误边界组件捕获错误并进行处理。
class ErrorDemo extends React.Component {
render() {
return (
<main>
<h1>ReactJS错误边界演示</h1>
<ErrorBoundary>
<ErrorComponent />
</ErrorBoundary>
</main>
);
}
}
class ErrorComponent extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
handleClick = () => {
this.setState({ hasError: true });
}
render() {
if (this.state.hasError) {
throw new Error('发生错误');
}
return (
<button onClick={this.handleClick}>模拟错误</button>
);
}
}
上述示例中,当用户点击模拟错误按钮时,ErrorComponent
抛出异常,ErrorBoundary
捕获到错误并展示了友好的错误提示页面。
示例说明二:组合使用
错误边界组件也可以嵌套组合使用,以达到多重错误处理的效果。
class MultiBoundaryDemo extends React.Component {
render() {
return (
<main>
<h1>ReactJS多重错误边界演示</h1>
<ErrorBoundary>
<ErrorBoundary>
<ErrorComponent />
</ErrorBoundary>
</ErrorBoundary>
</main>
);
}
}
上述示例中,使用了两个嵌套的 ErrorBoundary
组件,当 ErrorComponent
抛出异常时,内部的 ErrorBoundary
组件无法捕获到错误,从而将错误抛到了外部父级 ErrorBoundary
组件中进行处理。
本文标题为:Reactjs 错误边界优雅处理方法demo
- 详解Vue-Router源码分析路由实现原理 2024-02-13
- 设置和读取cookie的javascript代码 2024-02-12
- JS实现清除指定cookies的方法 2024-01-14
- Ajax实现省市县三级联动 2023-02-23
- VScode自动生成HTML的含义 2023-10-27
- JavaScript实现弹出模态窗体并接受传值的方法 2023-11-30
- layui解决element树形表格全选失效,刷新保持原数据选中 2022-10-20
- jQuery实现可以编辑的表格实例详解【附demo源码下载】 2024-02-05
- 利用iscroll4实现轮播图效果实例代码 2024-02-21
- javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第2/2页 2024-01-14