react創(chuàng)建組件的兩種方式

組件的渲染過程

調(diào)取組件的時(shí)候,babel解析,傳遞給createElement的第一個(gè)參數(shù)type不再是字符串標(biāo)簽名,而是函數(shù)或者類,生成的對(duì)象中,type也是一個(gè)函數(shù),當(dāng)render渲染的時(shí)候會(huì)根據(jù)type的類型不同而做不同的事情(如果是字符串就創(chuàng)建元素,如果是函數(shù),就會(huì)把函數(shù)執(zhí)行,把返回的jsx對(duì)象創(chuàng)建成為新的元素進(jìn)行渲染),函數(shù)執(zhí)行的時(shí)候會(huì)把解析出來的對(duì)象中的props作為屬性傳遞給組件

函數(shù)式創(chuàng)建組件

  1. 函數(shù)返回一個(gè)jsx
  2. props儲(chǔ)存的值是一個(gè)對(duì)象,包含了調(diào)用組件時(shí)候傳遞的屬性值(不傳是一個(gè)空對(duì)象)
ReactDOM.render(<div>
  <ComponentA props1={12} className="class1">
    <span>lalla</span>
  </ComponentA >
</div>,root)

function ComponentA(props){
  let {props1,className,children}=props
  return <div className={className}>
  <span>{props1}<span>
  <p>{props2}<p>
  {children}//就是<span>lalla</span>
</div>
}

只能通過操作組件的DOM修改組件,使用ref屬性獲取元素
沒有自己的狀態(tài)state

類式創(chuàng)建組件

基于繼承component類來創(chuàng)建組件

class  ComponentB extends React.Component{
  constructor(props){
    super(props)
    //super必須寫 否則報(bào)錯(cuò),相當(dāng)于React.Component.call(this),就是call繼承,繼承父級(jí)私有屬性
    //在繼承私有的時(shí)候,把傳遞的屬性掛載到了子類的實(shí)例上,在constructor中就可以使用this.props了
     /** 
     *{
      *  this.props//屬性集合
      *  this.refs//refs集合
      *  this.context//上下文
     * }
      */
    this.state={//相當(dāng)于vue組件中的data
      name:123
    }
  }
  render(){
    return <div>{this.state.name}{this.props.aa}</div>
  }
}

區(qū)別

  • 函數(shù)創(chuàng)建式:
    1. 操作簡單
    2. 能實(shí)現(xiàn)的功能簡單,只能簡單的調(diào)取和返回jsx
    3. 沒有state狀態(tài)
  • 類創(chuàng)建式
    1. 操作復(fù)雜,實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯
    2. 能夠使用聲明周期函數(shù)
    3. 函數(shù)式可以理解為靜態(tài)組件(很難修改的),類的方式可以基于組件內(nèi)部的狀態(tài)來動(dòng)態(tài)渲染組件的內(nèi)容
?著作權(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)容

  • 1.創(chuàng)建組件兩種方式 方式1.函數(shù)式組件 方式2.函數(shù)式組件--使用ES6的class來定義一個(gè)組件 本文目的僅僅...
    靜簡明閱讀 346評(píng)論 0 0
  • 作為一個(gè)合格的開發(fā)者,不要只滿足于編寫了可以運(yùn)行的代碼。而要了解代碼背后的工作原理;不要只滿足于自己的程序...
    六個(gè)周閱讀 8,684評(píng)論 1 33
  • [toc] REACT react :1.用來構(gòu)建用戶界面的 JAVASCRIPT 庫2.react 專注于視圖層...
    撥開云霧0521閱讀 1,588評(píng)論 0 1
  • 以下內(nèi)容是我在學(xué)習(xí)和研究React時(shí),對(duì)React的特性、重點(diǎn)和注意事項(xiàng)的提取、精練和總結(jié),可以做為React特性...
    科研者閱讀 8,416評(píng)論 2 21
  • 40、React 什么是React?React 是一個(gè)用于構(gòu)建用戶界面的框架(采用的是MVC模式):集中處理VIE...
    萌妹撒閱讀 1,194評(píng)論 0 1

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