• React 错误处理


    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>
          )
      }
    }
    复制代码
  • 相关阅读:
    1203 有穷自动机
    1111 评论
    C语言文法 改
    用户调研
    阅读《构建之法》 第8 第9 第10章
    sprint冲刺(第二天)
    sprint初步计划(第一天)
    作业6 团队项目之需求
    作业5 四则运算 测试与封装 5.1 5.2
    作业5 四则运算 测试与封装 5.1
  • 原文地址:https://www.cnblogs.com/axl234/p/14166373.html
Copyright © 2020-2023  润新知