zoukankan      html  css  js  c++  java
  • React 错误处理(componentDidCatch)

    前言

       看react 文档突然发现有这个 错误处理函数,好像是17年9月出的,这个真的绝了可以帮助我们捕捉错误咯

     React 16 将提供一个内置函数 componentDidCatch,如果 render() 函数抛出错误,则会触发该函数。

    官网例子

    下面这个:

    class ErrorBoundary extends React.Component {
      constructor(props) {
        super(props);
        this.state = { hasError: false };
      }
    
      componentDidCatch(error, info) {
        // Display fallback UI
        this.setState({ hasError: true });
        // You can also log the error to an error reporting service
        logErrorToMyService(error, info);
      }
    
      render() {
        if (this.state.hasError) {
          // You can render any custom fallback UI
          return <h1>Something went wrong.</h1>;
        }
        return this.props.children;
      }
    }

    当然你可以把这个组件封装下成为

    <ErrorBoundary>
      <MyWidget />
    </ErrorBoundary>

    然后在顶部或任何地方,你可以这样使用它

     另一个特性:

    componentDidCatch 是包含错误堆栈的 info 对象!

    {this.state.info && this.state.info.componentStack}

     

    当然我是这么用的在路由那边

    class App extends React.Component {
      constructor(props) {
        super(props)
        this.state = {
          hasError: false
        }
      }
      componentDidCatch(error, info) {
        console.log(error, info)
        this.setState({
          hasError: true
        })
      }
      render() {
        return this.state.hasError ?
          <h2>页面出错了404</h2>
          : (
            <React.Fragment>
              {/* 检验是否有登录信息 */}
              <AutoRoute />
              {/* 有了switch后,匹配到path后就不会再匹配下去了 */}
              <Switch>
                <Route path="/login" component={Login}></Route>
                <Route path='/register' component={Register}></Route>
                <Route path='/chat/:user' component={Chat}></Route>
              </Switch>
            </React.Fragment>
          )
      }
    }

    其实还是组件化比较好一点,毕竟复用性比较高

  • 相关阅读:
    Redis学习六(java中使用redis)
    Redis学习五(新数据类型)
    Redis学习四(发布和订阅)
    Redis学习三(配置文件说明)
    Redis学习二(常用五大数据类型)
    Redis学习一(源码安装redis)
    RocketMq常见问题记录
    总结多种容器化技术对比
    关于Redis集群部署和持久化的相关问题
    配置Jenkins连接kubernetes的Pod Template模板
  • 原文地址:https://www.cnblogs.com/yf-html/p/9294737.html
Copyright © 2011-2022 走看看