高階組件

Hoc(高階組件)

概念

  1. 概念: 接受組件, 返回新組件,新的組件可以對屬性進(jìn)行包裝,重寫部分生命周期(類比高階函數(shù))

  2. 例子說明: 普通函數(shù): Hoc, 高階組件: WithLog 和 WithHoc, 最終組件: HocCom

hoc基本用法

```jsx
    const WithHoc = (Com) => {
      // 獲取title,title可能來自于接口或其他手段
      const title = 'Hoc'
      // 對屬性進(jìn)行包裝(進(jìn)行title的新增)
      // return props => <Com {...props} title={title}></Com>
      // 重寫生命周期
      return class extends Component {
        componentDidMount () {
          console.log('重寫生命周期')
        }
        render () {
          return <Com {...this.props} title={title}></Com>
        }
      }
    }
```

hoc鏈?zhǔn)秸{(diào)用

```jsx
    // 普通組件
    class Hoc = () => <div>{props.stage} -- {props.title}</div>
    
    // 打印log的高階組件
    const WithLog = (Com) => {
      console.log('log');
      return props => <Com {...props}></Com>
    }
    
    // 高階組件的鏈?zhǔn)秸{(diào)用, 經(jīng)過多次包裝之后返回新的組件
    const NewHoc = WithLog(WithHoc(WithLog(Hoc)));
    // 最終使用
    const HocCom = () => <NewHoc stage='React'></NewHoc>
```

hoc裝飾器用法

  1. 注意

        1. 裝飾器的安裝使用: npm install --save-dev babel-plugin-transform-decorators-legacy
        
        2. 裝飾器只是鏈?zhǔn)秸{(diào)用的語法糖, 使得代碼更加簡單
        
        3. 裝飾器只能裝飾在類
        
        4. 裝飾器的高階組件執(zhí)行順序是, 由下至上
    
  2. 代碼

        @WithHoc
        @WithLog
        class Hoc extends Component {
          render () {
            return <div>{this.props.stage} -- {this.props.title}</div>
          }
        }
        
        // 上面是經(jīng)過高階組件包裝完成后返回的最終組件, 直接拿來用即可
        const HocCom = () => <Hoc stage='React'></Hoc>
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • React進(jìn)階之高階組件 前言 本文代碼淺顯易懂,思想深入實(shí)用。此屬于react進(jìn)階用法,如果你還不了解react...
    流動(dòng)碼文閱讀 1,230評(píng)論 0 1
  • 前言 Ract16后,想去官網(wǎng)看看有啥新的特性,無意間發(fā)現(xiàn)官網(wǎng)支持簡體中文了,我是有多久沒看了(以前學(xué)習(xí)害得我看繁...
    Kevin丶CK閱讀 1,296評(píng)論 0 1
  • 前言 學(xué)習(xí)react已經(jīng)有一段時(shí)間了,期間在閱讀官方文檔的基礎(chǔ)上也看了不少文章,但感覺對很多東西的理解還是不夠深刻...
    Srtian閱讀 1,752評(píng)論 0 7
  • 原文地址:https://github.com/SmallStoneSK/Blog/issues/6 1. 前言 ...
    小石頭若海閱讀 1,020評(píng)論 2 2
  • 這是初中開始前的一場軍訓(xùn),韓琳正在焦頭爛額。面對突然大姨媽來了的她,第二天要去軍訓(xùn),真不是善茬。 軍訓(xùn)到來...
    BelovedX閱讀 491評(píng)論 2 1

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