constructor()、super()、super(props)

使用es6的class定義react組件時(shí),經(jīng)常會(huì)看到下面的代碼:

constructor(props) {
  super(props);
  ...
}

通常會(huì)有兩個(gè)疑問:

  1. 必須要調(diào)用super()嗎?
  2. super()與super(props)有什么不同?

一、第一個(gè)問題

先說結(jié)論:

只要存在constructor就要調(diào)用super()

但是,不是每個(gè)react組件都需要constructor,比如下面的代碼是可以正常運(yùn)行的:

class App extends React.Component {
  render() {
    return (
      <h1>{this.props.text}</h1>
    );
  }
}

很多時(shí)候需要在constructor中訪問this:

constructor() {
  console.log(this); --- Syntax error: 'this' is not allowed before super()
}

這是因?yàn)楫?dāng)沒有調(diào)用super()時(shí),this還沒有被初始化,所以不能使用;那如果我不使用this呢?

constructor() {
--- Syntax error: missing super() call in constructor
}

es6會(huì)在語法層面強(qiáng)制你調(diào)用super(),所以得到的結(jié)論就是:<b>只要存在constructor就必須調(diào)用super()</b>

二、第二個(gè)問題

第一個(gè)問題已經(jīng)回答了什么時(shí)候調(diào)用super(),那什么時(shí)候必須要調(diào)用super(props)呢?先說結(jié)論:

當(dāng)需要在constructor中訪問<b>this.props</b>的情況下

從上面的代碼可以看出,即使沒有constructor,依然可以在render中使用this.props,這是因?yàn)閞eact在初始化class后,會(huì)將props自動(dòng)設(shè)置到this中,所以在任何地方都可以直接訪問this.props,除了一個(gè)地方:<b>constructor</b>

constructor(props) {
  super();
  console.log(this.props); --- undefined
}

所以當(dāng)你需要在constructor中訪問this.props時(shí),才需要設(shè)置super(props)

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 數(shù)月前,F(xiàn)acebook 對(duì)外宣布了正在開發(fā)的 React Native 框架,這個(gè)框架允許你使用 JavaScr...
    木易林1閱讀 1,307評(píng)論 0 1
  • 最近看了一本關(guān)于學(xué)習(xí)方法論的書,強(qiáng)調(diào)了記筆記和堅(jiān)持的重要性。這幾天也剛好在學(xué)習(xí)React,所以我打算每天堅(jiān)持一篇R...
    gaoer1938閱讀 1,815評(píng)論 0 5
  • 深入JSX date:20170412筆記原文其實(shí)JSX是React.createElement(componen...
    gaoer1938閱讀 8,183評(píng)論 2 35
  • 關(guān)于JSX 考慮這樣一段代碼:const element = Hello, world! ;這段代碼既不是字符串...
    帶三本書閱讀 454評(píng)論 0 1
  • 思竹最近這大半年在研究花道,因?yàn)橄矚g花,所以才走上了這條路,因?yàn)闀r(shí)間自由財(cái)務(wù)自由,純粹為了這字“愛”才會(huì)堅(jiān)持下來。...
    龍思竹閱讀 679評(píng)論 1 7

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