React 新特性 lazy&Suspense 及相關(guān)錯誤處理

lazy&Suspense 基本使用

JS 模塊延時加載,做代碼拆分

import React, { Component, lazy, Suspense } from 'react'

// 這里使用 webpackChunkName 可以自定義 chunk 的名稱方便調(diào)試
const Detail = lazy(() => import(/* webpackChunkName: "LoadingDetail" */'./Detail'))

class App extends Component {
  render () {
    return (
      <div>
        <Suspense fallback={<div>Loading</div>}>
          <Detail></Detail>
        </Suspense>
      </div>
    )
  }
}

export default App

使用 React生命周期 攔截組件加載失敗

import React, { Component, lazy, Suspense } from 'react'

// 這里使用 webpackChunkName 可以自定義 chunk 的名稱方便調(diào)試
const Detail = lazy(() => import(/* webpackChunkName: "LoadingDetail" */'./Detail'))

class App extends Component {

  state = {
    hasError: false
  }

  // 組件加載出錯會調(diào)用的生命周期
  componentDidCatch () {
    this.setState({
      hasError: true
    })
  }

  render () {
    if (this.state.hasError) {
      return <div>加載出錯</div>
    }
    return (
      <div>
        <Suspense fallback={<div>Loading</div>}>
          <Detail></Detail>
        </Suspense>
      </div>
    )
  }
}
export default App

使用 getDerivedStateFromError() 攔截組件加載失敗

import React, { Component, lazy, Suspense } from 'react'

// 這里使用 webpackChunkName 可以自定義 chunk 的名稱方便調(diào)試
const Detail = lazy(() => import(/* webpackChunkName: "LoadingDetail" */'./Detail'))

class App extends Component {

  state = {
    hasError: false
  }

  // 一旦出現(xiàn)錯誤,就會返回一個新的 state 數(shù)據(jù)并且合并到現(xiàn)有的 state 中
  static getDerivedStateFromError () {
    return {
      hasError: true
    }
  }

  render () {
    if (this.state.hasError) {
      return <div>加載出錯</div>
    }
    return (
      <div>
        <Suspense fallback={<div>Loading</div>}>
          <Detail></Detail>
        </Suspense>
      </div>
    )
  }
}
export default App
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容