错误边界是一种特殊的组件,能够用来捕获并打印发生在其子组件树任何位置
的JavaScript错误,并渲染出备用UI。
错误边界会在渲染期间
,声明周期方法
,和整组件树的构造函数
中捕获错误。因此错误边界没法捕获如下场景中产生的错误:react
错误边界相似于JavaScript的catch,可是它只针对react服务器
错误边界能够解决部分UI的JavaScript错误会致使整个应用崩溃的问题。
自 React 16 起,任何未被错误边界捕获的错误将会致使整个 React 组件树被卸载,使用错误边界能够提供更好的用户体验异步
在class组件中定义static getDerivedStateFromError()
或componentDidCatch()
着两个声明周期方法中的任意一个(或两个),该组件就成为了一个错误边界。函数
getDerivedStateFromError()
用来处理错误componentDidCatch()
来输出完整的错误信息//定义 class ErrorBoundary extends React.Component { constructor(props) { super(props); this.state = { hasError: false }; } static getDerivedStateFromError(error) { // 更新 state 使下一次渲染可以显示降级后的 UI return { hasError: true }; } componentDidCatch(error, errorInfo) { // 你一样能够将错误日志上报给服务器 logErrorToMyService(error, errorInfo); } render() { if (this.state.hasError) { // 你能够自定义降级后的 UI 并渲染 return <h1>Something went wrong.</h1>; } return this.props.children; } } //使用 <ErrorBoundary> <MyWidget /> </ErrorBoundary>
错误边界能够搭配错误监控来记录生产环境产生的错误this
在任意react组件外来包裹错误边界,以保护边界外的内容不崩溃spa
try / catch 仅能用于命令式代码(imperative code),可是react组件是声明式的,因此须要错误边界来捕捉错误日志