react lazy和suspense

Posted lxz-blogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了react lazy和suspense相关的知识,希望对你有一定的参考价值。

代码拆分

  • Webpack-Code Splitting
  • import    import(‘./detail.js‘).then(...)
import React, { Component,lazy,Suspense } from ‘react‘;

const About = lazy(()=>import(/* webpackChunkName:"about" */ ‘./About‘))
 
//ErrorBoundary 错误边界
//componentDidCatch

class App extends Component {

  state={
    hasError:false
  }

  // 和componentDidCatch效果等同
  static getDerivedStateFromError(){
    return{
      hasError:true
    }
  }

  // componentDidCatch(error,info){
  //   this.setState({
  //     hasError:true
  //   })
  // }

  render() { 
    const {hasError} =this.state
    if(hasError){
      return <div>Error</div>
    }
    return <div>
        <Suspense fallback={<div>loading</div>}>
          <About />
        </Suspense>
      </div>
     
  }
}
 
export default App;

错误边界用法

class PotentialError extends React.Component {   
  constructor(props) {     
    super(props);     
    this.state = { error: false };
  }
  componentDidCatch(error, info) {     
    this.setState({ error, info });
  }
  render() {
    if (this.state.error) {
      return <h1>Error: {this.state.error.toString()}</h1>;
    }
    return this.props.children;   
  } 
}
<PotentialError><AwesomeApp /></PotentialError>

以上是关于react lazy和suspense的主要内容,如果未能解决你的问题,请参考以下文章

如何使用React.lazy和Suspense进行组件延迟加载

使用 React.lazy、Suspense 和 react-router-dom 进行代码拆分不起作用

React源码 Suspense 和 ReactLazy

react之Lazy和Suspense(懒加载)

React.lazy和React.Suspense异步加载组件

React中异步模块api React.lazy和React.Suspense