最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于React16.0的componentDidCatch方法解讀

 更新時(shí)間:2023年05月20日 09:17:06   作者:qq_43239820  
這篇文章主要介紹了關(guān)于React16.0的componentDidCatch方法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

React16.0的componentDidCatch方法

這段時(shí)間看了下react一些新特性,想說(shuō)說(shuō)其中一個(gè)。

React 16 將提供一個(gè)內(nèi)置函數(shù) componentDidCatch,如果 render() 函數(shù)拋出錯(cuò)誤,該函數(shù)可以捕捉到錯(cuò)誤信息,并且可以展示相應(yīng)的錯(cuò)誤信息,這個(gè)方法真的很贊!

那么componentDidCatch究竟可以做什么?有什么好處?

  • 當(dāng)有錯(cuò)誤發(fā)生時(shí), 我們可以友好地展示 fallback 組件;
  • 可以捕捉到它的子元素(包括嵌套子元素)拋出的異常;
  • 可以復(fù)用錯(cuò)誤組件;

代碼詳解:

import React, { Component } from 'react'
export default class App extends Component {
  render() {
    return (
      <div>
        <PointerError>
          <SomeState></SomeState>
        </PointerError>
      </div>
    )
  }
}
class PointerError extends Component {
  // PointerError是錯(cuò)誤捕獲組件
  constructor(props) {
    super(props)
    this.state = {
      error: false,
      text: ''
    }
  }
  // parseStr(str) {
  // 格式化位置組件錯(cuò)誤信息
  //   let res = str.match(/in[^\(]+\(/g)
  //   res = res.map(item => item.slice(3, -2))
  //   console.log('res', res)
  // }
  componentDidCatch(error, info) {
    console.log(error, info)
    alert('錯(cuò)誤發(fā)生的位置:' + info.componentStack) //錯(cuò)誤信息error.message, 錯(cuò)誤堆棧error.stack, 組件堆棧info.componentStack
    this.setState({
      error,
      info,
      text: info.componentStack
    })
  }
  render() {
    if (this.state.error) {
      return (
        <div>
          <h1>錯(cuò)誤是:{this.state.error.toString()}</h1>
          <h2>錯(cuò)誤出現(xiàn)的位置是:{this.state.text}</h2>
          <img src="https://dss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2942945378,442701149&fm=26&gp=0.jpg" />
        </div>
      )
    }
    return this.props.children
  }
}
class SomeState extends Component {
  constructor(props) {
    super(props)
    this.state = { error: false }
  }
  render() {
    throw new Error('我發(fā)生了錯(cuò)誤') //報(bào)錯(cuò)信息
    return (
      <div>
        <div>你已經(jīng)正確的打開(kāi)了頁(yè)面</div>
      </div>
    )
  }
}

上面代碼中聲明了一個(gè)PointerError 組件和一個(gè)SomeState 組件,PointerError 就是我們說(shuō)的錯(cuò)誤提示組件,我在其子元素中(也就是SomeState 組件)拋出來(lái)一個(gè)錯(cuò)誤,它內(nèi)置的componentDidCatch()方法可以幫我們捕捉到錯(cuò)誤信息,在控制臺(tái)打印可看到:

這樣的話就可以用一個(gè)錯(cuò)誤信息頁(yè)面來(lái)代替由于某個(gè)組件報(bào)錯(cuò)而頁(yè)面異常了

另一個(gè)特性

componentDidCatch 它也是一個(gè)包含錯(cuò)誤堆棧的 info 對(duì)象,這將告訴你組件在哪里失效!

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

React錯(cuò)誤處理(componentDidCatch)

看react 文檔突然發(fā)現(xiàn)有這個(gè) 錯(cuò)誤處理函數(shù),好像是17年9月出的,這個(gè)真的絕了可以幫助我們捕捉錯(cuò)誤咯

React 16 將提供一個(gè)內(nèi)置函數(shù) componentDidCatch,如果 render() 函數(shù)拋出錯(cuò)誤,則會(huì)觸發(fā)該函數(shù)。

官網(wǎng)例子

下面這個(gè):

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;
  }
}

當(dāng)然你可以把這個(gè)組件封裝下成為

<ErrorBoundary>
? <MyWidget />
</ErrorBoundary>

然后在頂部或任何地方,你可以這樣使用它

 另一個(gè)特性:

componentDidCatch 是包含錯(cuò)誤堆棧的 info 對(duì)象!

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

當(dāng)然我是這么用的在路由那邊

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>頁(yè)面出錯(cuò)了404</h2>
      : (
        <React.Fragment>
          {/* 檢驗(yàn)是否有登錄信息 */}
          <AutoRoute />
          {/* 有了switch后,匹配到path后就不會(huì)再匹配下去了 */}
          <Switch>
            <Route path="/login" component={Login}></Route>
            <Route path='/register' component={Register}></Route>
            <Route path='/chat/:user' component={Chat}></Route>
          </Switch>
        </React.Fragment>
      )
  }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • React?Native與iOS?OC之間的交互示例詳解

    React?Native與iOS?OC之間的交互示例詳解

    這篇文章主要為大家介紹了React?Native與iOS?OC之間的交互示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • React Native功能豐富的Toast通知庫(kù)

    React Native功能豐富的Toast通知庫(kù)

    這篇文章主要為大家介紹了React Native功能豐富的Toast通知庫(kù)使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • redux的原理、工作流程及其應(yīng)用方式

    redux的原理、工作流程及其應(yīng)用方式

    這篇文章主要介紹了redux的原理、工作流程及其應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • React?Hooks useReducer?逃避deps組件渲染次數(shù)增加陷阱

    React?Hooks useReducer?逃避deps組件渲染次數(shù)增加陷阱

    這篇文章主要介紹了React?Hooks?之?useReducer?逃避deps后增加組件渲染次數(shù)的陷阱詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 如何在React項(xiàng)目中引入字體文件并使用詳解

    如何在React項(xiàng)目中引入字體文件并使用詳解

    我們項(xiàng)目中通常會(huì)需要引入字體,所以下面這篇文章主要給大家介紹了關(guān)于如何在React項(xiàng)目中引入字體文件并使用的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • React Ant Design樹(shù)形表格的復(fù)雜增刪改操作

    React Ant Design樹(shù)形表格的復(fù)雜增刪改操作

    這篇文章主要介紹了React Ant Design樹(shù)形表格的復(fù)雜增刪改操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Vite搭建React項(xiàng)目的方法步驟

    Vite搭建React項(xiàng)目的方法步驟

    這篇文章主要介紹了Vite搭建React項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • ReactNative中使用Redux架構(gòu)總結(jié)

    ReactNative中使用Redux架構(gòu)總結(jié)

    本篇文章主要介紹了ReactNative中使用Redux架構(gòu)總結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 淺談React中的元素、組件、實(shí)例和節(jié)點(diǎn)

    淺談React中的元素、組件、實(shí)例和節(jié)點(diǎn)

    這篇文章主要介紹了淺談React中的元素、組件、實(shí)例和節(jié)點(diǎn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • react-native彈窗封裝的方法

    react-native彈窗封裝的方法

    這篇文章主要為大家詳細(xì)介紹了react-native彈窗封裝的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評(píng)論

台中县| 清镇市| 新闻| 和政县| 兖州市| 双江| 铜鼓县| 安仁县| 金川县| 西宁市| 浦县| 北海市| 惠安县| 高邮市| 定南县| 巢湖市| 九台市| 冀州市| 广河县| 长武县| 湘乡市| 丽水市| 琼中| 阿克苏市| 抚州市| 景泰县| 龙山县| 永嘉县| 荃湾区| 汝城县| 西贡区| 武隆县| 嘉定区| 岑巩县| 同心县| 铅山县| 农安县| 上林县| 柏乡县| 虞城县| 新巴尔虎右旗|