react學(xué)習(xí)筆記(四)

錯(cuò)誤邊界(Error Boundaries)

部分 UI 的 JavaScript 錯(cuò)誤不應(yīng)該導(dǎo)致整個(gè)應(yīng)用崩潰,為了解決這個(gè)問(wèn)題,React 16 引入了一個(gè)新的概念 —— 錯(cuò)誤邊界。

錯(cuò)誤邊界是一種 React 組件,這種組件可以捕獲并打印發(fā)生在其子組件樹(shù)任何位置的 JavaScript 錯(cuò)誤,并且,它會(huì)渲染出備用 UI,而不是渲染那些崩潰了的子組件樹(shù)。錯(cuò)誤邊界在渲染期間、生命周期方法和整個(gè)組件樹(shù)的構(gòu)造函數(shù)中捕獲錯(cuò)誤。

錯(cuò)誤邊界的工作方式類(lèi)似于 JavaScript 的?catch {},不同的地方在于錯(cuò)誤邊界只針對(duì) React 組件。只有 class 組件才可以成為成錯(cuò)誤邊界組件。大多數(shù)情況下, 你只需要聲明一次錯(cuò)誤邊界組件, 并在整個(gè)應(yīng)用中使用它。

注意錯(cuò)誤邊界僅可以捕獲其子組件的錯(cuò)誤,它無(wú)法捕獲其自身的錯(cuò)誤。如果一個(gè)錯(cuò)誤邊界無(wú)法渲染錯(cuò)誤信息,則錯(cuò)誤會(huì)冒泡至最近的上層錯(cuò)誤邊界,這也類(lèi)似于 JavaScript 中 catch {} 的工作機(jī)制。


錯(cuò)誤邊界應(yīng)該放置在哪?

錯(cuò)誤邊界的粒度由你來(lái)決定,可以將其包裝在最頂層的路由組件并為用戶(hù)展示一個(gè) “Something went wrong” 的錯(cuò)誤信息,就像服務(wù)端框架經(jīng)常處理崩潰一樣。你也可以將單獨(dú)的部件包裝在錯(cuò)誤邊界以保護(hù)應(yīng)用其他部分不崩潰。


Fragments

React 中的一個(gè)常見(jiàn)模式是一個(gè)組件返回多個(gè)元素。Fragments 允許你將子列表分組,而無(wú)需向 DOM 添加額外節(jié)點(diǎn)。

短語(yǔ)法

你可以使用一種新的,且更簡(jiǎn)短的語(yǔ)法來(lái)聲明 Fragments。它看起來(lái)像空標(biāo)簽:


高階組件(higherOrderComponent)

高階組件(HOC)是 React 中用于復(fù)用組件邏輯的一種高級(jí)技巧。HOC 自身不是 React API 的一部分,它是一種基于 React 的組合特性而形成的設(shè)計(jì)模式。

具體而言,高階組件是參數(shù)為組件,返回值為新組件的函數(shù)。

const EnhancedComponent=higherOrderComponent(WrappedComponent);

組件是將 props 轉(zhuǎn)換為 UI,而高階組件是將組件轉(zhuǎn)換為另一個(gè)組件。

HOC 在 React 的第三方庫(kù)中很常見(jiàn),例如 Redux 的?connect?和 Relay 的?createFragmentContainer。

在一個(gè)大型應(yīng)用程序中,這種訂閱?DataSource?和調(diào)用?setState?的模式將一次又一次地發(fā)生。我們需要一個(gè)抽象,允許我們?cè)谝粋€(gè)地方定義這個(gè)邏輯,并在許多組件之間共享它。這正是高階組件擅長(zhǎng)的地方。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 深入JSX date:20170412筆記原文其實(shí)JSX是React.createElement(componen...
    gaoer1938閱讀 8,185評(píng)論 2 35
  • 簡(jiǎn)介 React的組件簡(jiǎn)單理解起來(lái)其實(shí)就是一個(gè)函數(shù),這個(gè)函數(shù)會(huì)接收props和state作為參數(shù),然后進(jìn)行相應(yīng)的邏...
    桂圓_noble閱讀 1,067評(píng)論 1 2
  • 代碼分割 使用Webpack或者Browserify這樣的打包工具,最終會(huì)生成一個(gè)bundle.js,會(huì)一次性把代...
    yozosann閱讀 835評(píng)論 0 1
  • 基礎(chǔ) jsx(原理?) 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的createElement及render方法 組件聲明方式 props和st...
    水落斜陽(yáng)閱讀 390評(píng)論 0 2
  • 過(guò)去組件內(nèi)的的js錯(cuò)誤常常會(huì)破壞React內(nèi)部的狀態(tài),并在下一次渲染時(shí)產(chǎn)生 加密的 錯(cuò)誤信息。這些錯(cuò)誤總會(huì)早應(yīng)用代...
    XKolento閱讀 1,853評(píng)論 0 0

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