React_高階組件的使用

1.什么是高階組件?

官方的定義:高階組件是參數(shù)為組件反症,返回值為新組件的函數(shù);

高階函數(shù)的維基百科定義:至少滿足以下條件之一:

  1. 接受一個(gè)或多個(gè)函數(shù)作為輸入围俘;
  2. 輸出一個(gè)函數(shù)羹呵;
  3. avaScript中比較常見的filter壁晒、map瓷们、reduce都是高階函數(shù)。

2. 高階組件的調(diào)用過程類似于這樣:

const EnhancedComponent = higherOrderComponent(WrappedComponent);

3.高階函數(shù)的編寫過程類似于這樣:

function higherOrderComponent(WrappedComponent) {
  class NewCompoment extends PureComponent{
      render () {
        return <WrappedComponent/>
      }
  }
  NewCompoment.displayName = "CoderHzc"
}

3.1 組件的名稱問題:
-- 在ES6中秒咐,類表達(dá)式中類名是可以省略的谬晕;
-- 組件的名稱都可以通過displayName來修改;
3.2 高階組件并不是React API的一部分携取,它是基于React的 組合特性而形成的設(shè)計(jì)模式固蚤;
3.3 高階組件在一些React第三方庫(kù)中非常常見:

4. 具體代碼如下:

import React, { PureComponent } from 'react'

// 0.
 class App extends PureComponent {
  render() {
    return (
      <div>
        App 
      </div>
    )
  }
}
// 修改App名字問題
App.displayName = "CoderHzc"
// 1.定義一個(gè)高階組件
function enhanceComponent(WrappedComponent) {
  return class NewComponent extends PureComponent {
    render() {
      return <WrappedComponent {...this.props}/>
    }
  }
}
// 2.
const EnhanceComponent = enhanceComponent(App)
// 3.
export default EnhanceComponent

5.高階組件應(yīng)用-增強(qiáng)props具體代碼如下:

  1. 引入createContext
    import React, { PureComponent, createContext } from 'react';
  2. 創(chuàng)建Context
    // 創(chuàng)建Context
    const UserContext = createContext({
    nickname: "默認(rèn)",
    level: -1,
    區(qū)域: "中國(guó)"
    });
    3.使用UserContext中有個(gè)Provider屬性包裹組件
    <UserContext.Provider value={{nickname: "why", level: 90, region: "中國(guó)"}}>
    <Home/>
      <About/>
    </UserContext.Provider>
import React, { PureComponent, createContext } from 'react';

// 創(chuàng)建Context
const UserContext = createContext({
  nickname: "默認(rèn)",
  level: -1,
  區(qū)域: "中國(guó)"
});
class Home extends PureComponent {
  render() {
    return (
      <UserContext.Consumer>
        {
          user => {
            return <h2>Home: {`昵稱: ${user.nickname} 等級(jí): ${user.level} 區(qū)域: ${user.region}`}</h2>
          } 
        }
      </UserContext.Consumer>
    )
  }
}

class About extends PureComponent {
  render() {
    return (
      <UserContext.Consumer>
        {
          user => {
            return <h2>About: {`昵稱: ${user.nickname} 等級(jí): ${user.level} 區(qū)域: ${user.region}`}</h2>
          } 
        }
      </UserContext.Consumer>
    )
  }
}

class App extends PureComponent {
  render() {
    return (
      <div>
        App
        <UserContext.Provider value={{nickname: "why", level: 90, region: "中國(guó)"}}>
          <Home/>
          <About/>
        </UserContext.Provider>
      </div>
    )
  }
}

export default App;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市歹茶,隨后出現(xiàn)的幾起案子夕玩,更是在濱河造成了極大的恐慌,老刑警劉巖惊豺,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件燎孟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡尸昧,警方通過查閱死者的電腦和手機(jī)揩页,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烹俗,“玉大人爆侣,你說我怎么就攤上這事萍程。” “怎么了兔仰?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵茫负,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我乎赴,道長(zhǎng)忍法,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任榕吼,我火速辦了婚禮饿序,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘羹蚣。我一直安慰自己原探,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布顽素。 她就那樣靜靜地躺著咽弦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪戈抄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天后专,我揣著相機(jī)與錄音划鸽,去河邊找鬼。 笑死戚哎,一個(gè)胖子當(dāng)著我的面吹牛裸诽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播型凳,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼丈冬,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了甘畅?” 一聲冷哼從身側(cè)響起埂蕊,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疏唾,沒想到半個(gè)月后蓄氧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡槐脏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年喉童,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顿天。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堂氯,死狀恐怖蔑担,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咽白,我是刑警寧澤啤握,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站局扶,受9級(jí)特大地震影響恨统,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜三妈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一畜埋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧畴蒲,春花似錦悠鞍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蔫骂,卻和暖如春么翰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辽旋。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工浩嫌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人补胚。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓码耐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親溶其。 傳聞我的和親對(duì)象是個(gè)殘疾皇子骚腥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容