Reactjs 错误边界优雅处理方法demo

 更新时间:2022年12月13日 15:49:54   作者:Jovie  
这篇文章主要为大家介绍了Reactjs 错误边界优雅处理方法demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

每当你的react应用在任何react功能或类组件中遇到任何javascript错误时,都会破坏整个应用,这对你的终端用户来说是一种糟糕的体验。React 16 引入了错误边界 ,以摆脱你的应用程序中的这种糟糕体验。有了错误边界 ,你现在可以优雅地处理并让用户知道,每当你的应用程序遇到错误时,就会出现问题

在这篇文章中,我们将学习如何通过实现错误边界来处理这些错误 ,并看看它们的作用。

首先,在vs code或任何其他IDE中创建一个新的react应用程序,我个人更喜欢VS Code。

什么是错误边界?

错误边界也是反应组件,它可以帮助你捕捉被错误边界包裹的组件中的错误,并显示一个回退 UI(当捕捉到错误时显示的UI,而不是崩溃的应用程序)。

错误边界可以捕捉

  • 渲染错误
  • 生命周期错误
  • 构造器错误

错误边界不能捕捉

  • 事件处理程序中的错误
  • 异步代码中的错误
  • 服务器端渲染中的错误
  • 错误边界中的错误 (Duhh!)

错误边界的实现

要使一个类组件成为错误边界组件,你只需要定义**静态的getDerivedStateFromError()componentDidCatch()**生命周期方法。

让我们创建一个新的类组件并使其成为一个错误边界,让我们滚动

export default class ErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = { error: null, errorInfo: null };
  }
  componentDidCatch(error, errorInfo) {
    // use lifecycle to catch errors in any components below and re-render fallback UI
    this.setState({
      error: error,
      errorInfo: errorInfo,
    });
  }
  render() {
    if (this.state.errorInfo) {
      // Fallback UI
      return (
        <div>
          <h2>Something went wrong.</h2>
          <details style={{ whiteSpace: "pre-wrap" }}>
            {this.state.error && this.state.error.toString()}
            <br />
            {this.state.errorInfo.componentStack}
          </details>
        </div>
      );
    }
    // without error render normally in happy flow 
    return this.props.children;
  }
}

用错误边界包住组件

现在我们可以用错误边界来包装我们的整个应用程序,或者包装我们的子组件,以便在特定的组件上显示后退的用户界面,让我们看看这个动作吧

// Wrapping child component
<ErrorBoundary>
 <ComponentThatThrowsError />
</ErrorBoundary>
// Wrapping our entire application
<ErrorBoundary>
 <App />
</ErrorBoundary>

抛出一个错误

让我们在useEffect中抛出一个错误,看看我们的错误边界是否能抓住。

const ComponentThatThrowsError = () => {
  const [counter, setCounter] = useState(0);
  useEffect(() => {
    if (counter === 5) {
      throw new Error("Something went wrong");
    }
  }, [counter]);
  return (
    <div>
      <p>Parent Component Counter</p>
      <button
        className="btn"
        onClick={() => {
          setCounter(counter + 1);
        }}
      >
        {counter}
      </button>
    </div>
  );
};

当计数器的值等于5时,我们就抛出了一个错误。

晃动你的叔叔

我们可以看到,一旦子组件的计数器达到5,应用程序就会为该组件渲染回退的用户界面,而当主错误边界捕捉到一个错误时,它就会渲染出白色的屏幕,显示出出错的情况

总结

我们在这一章中讲了很多,我希望这对你来说不算太多。你学到了如何创建错误边界,以及为什么和在哪里使用它们。它们如何使你的应用程序的体验更好。

以上就是Reactjs 错误边界优雅处理方法demo的详细内容,更多关于Reactjs 错误边界的资料请关注脚本之家其它相关文章!

相关文章

  • 使用 React hooks 实现类所有生命周期

    使用 React hooks 实现类所有生命周期

    react 自 16.8 开始,引入了 Hooks 概念,使得函数组件中也可以拥有自己的状态,并且可以模拟对应的生命周期,这篇文章主要介绍了使用 React hooks 怎么实现类里面的所有生命周期,需要的朋友可以参考下
    2023-02-02
  • React实现评论的添加和删除

    React实现评论的添加和删除

    这篇文章主要为大家详细介绍了React实现评论的添加和删除,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • 使用Ant Design Anchor组件的一个坑及解决

    使用Ant Design Anchor组件的一个坑及解决

    这篇文章主要介绍了使用Ant Design Anchor组件的一个坑及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • 详解如何在React组件“外”使用父组件的Props

    详解如何在React组件“外”使用父组件的Props

    这篇文章主要介绍了详解如何在React组件“外”使用父组件的Props,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • React Native功能丰富的Toast通知库

    React Native功能丰富的Toast通知库

    这篇文章主要为大家介绍了React Native功能丰富的Toast通知库使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • react项目自行配置热更新的实现

    react项目自行配置热更新的实现

    本文主要介绍了react项目自行配置热更新的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • React受控组件与非受控组件详细介绍

    React受控组件与非受控组件详细介绍

    具体来说这是一种react非受控组件,其状态是在input的react内部控制,不受调用者控制。可以使用受控组件来实现。下面就说说这个React中的受控组件与非受控组件的相关知识,感兴趣的朋友一起看看吧
    2022-09-09
  • React+Ant Design开发环境搭建的实现步骤

    React+Ant Design开发环境搭建的实现步骤

    这篇文章主要介绍了React+Ant Design开发环境搭建的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Express+React+Antd实现上传功能(前端和后端)

    Express+React+Antd实现上传功能(前端和后端)

    这篇文章主要介绍了Express+React+Antd实现上传功能(前端和后端),本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • React实现前端选区的示例代码

    React实现前端选区的示例代码

    本文主要介绍了React实现前端选区的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05

最新评论