久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

react element什么意思

react element是“React.createElement”函數的返回值,即ReactElement;ReactElement的結構是“const element = {Element $$typeof: REACT_ELEMENT_TYPE,key: key,ref: ref,props: props,_owner: owner, };”。

react element什么意思

本教程操作環境:Windows10系統、react16.9.0版、Dell G3電腦。

react element什么意思?

React源碼 | ReactElement

說到ReactElement,不得不提到的就是在React中,用來替代JavaScript(JS)的語言,JSX。

JSX

作為React的官方指定語法,JSX允許用戶在JS代碼中插入HTML代碼。但是,這種寫法瀏覽器是無法解析的。他們需要一個轉換器,Babel就充當了這樣一個角色,他在JSX代碼編譯時候將其轉換成JS文件,這樣瀏覽器就能解析了。

怎么轉換呢,我們知道,JSX有JS和HTMl兩種寫法,本身就是JS寫法的其實是不需要轉換的,當然也不能說的這么絕對,有時候Babel會為了兼容性的緣故將高版本的語法翻譯到低版本,這部分不在討論范圍。我們要關注的其實是HTMl的處理方式。

比如下面這行代碼:

<div id='name'>Tom and Jerry</div>
登錄后復制

通過Babel轉換后生成的代碼是:

React.createElement("div", {     id: "name"}, "Tom and Jerry");
登錄后復制

HTML語法轉變成了JS語法,簡單來說,我們所寫的JSX最終變成了JS。

我們寫一個復雜點的例子:

<div class='wrapper' id='id_wrapper'>     <span>Tom</span>     <span>Jerry</span></div>React.createElement("div", {     class: "wrapper",     id: "id_wrapper" }, React.createElement("span", null, "Tom"), React.createElement("span", null, "Jerry"));
登錄后復制

轉換規則是比較簡單的,React.createElement的第一個參數是節點類型;第二個參數是該節點的屬性,以key:value的形式作為一個對象,后面的所有參數都是該節點的子節點。

需要注意的是,在JSX語法中,我們不僅有原生的HTML節點,還有大量的自定義組件,比如:

function Comp() {     return '<div>Tom and Jerry</div>' }  <Comp></Comp> function Comp() {     return '<div>Tom and Jerry</div>'; }  React.createElement(Comp, null);
登錄后復制

可以看出,React.createElement的第一個參數變成了一個變量,而不是一個字符串,嘗試將函數Comp首字母小寫:

function comp() {     return '<div>Tom and Jerry</div>' }  <comp></comp> function comp() {     return '<div>Tom and Jerry</div>'; }  React.createElement("comp", null);
登錄后復制

React.createElement的第一個參數又變成了一個字符串。
這也就是我們在React中寫組件的時候,為什么會要求首字母大寫的原因,Babel在編譯的時候會將首字母小寫的組件視為原生的HTMl節點進行處理,如果我們將自定義組件首字母小寫,后續的程序將無法識別這個組件,最終會報錯。

ReactElement

通過Babel編譯后的JS代碼,頻繁出現React.createElement這個函數。這個函數的返回值就是ReactElement,通過上面的示例可以看出,React.createElement函數的入參有三個,或者說三類。

  • type
    type指代這個ReactElement的類型。

    • 字符串比如div,p代表原生DOM,稱為HostComponent

    • Class類型是我們繼承自Component或者PureComponent的組件,稱為ClassComponent

    • 方法就是functional Component

    • 原生提供的Fragment、AsyncMode等是Symbol,會被特殊處理

  • config
    參照上面Babel編譯后的代碼,所有節點的屬性都會以Key:Value的形式放到config對象中。

  • children
    子節點不止會有一個,所以children不只有一個,從第二個參數以后的所有參數都是children,它是一個數組。

ReactElement的結構是這樣的

const element = {     // This tag allows us to uniquely identify this as a React Element    $$typeof: REACT_ELEMENT_TYPE,      // Built-in properties that belong on the element    type: type,     key: key,     ref: ref,     props: props,      // Record the component responsible for creating this element.    _owner: owner,   };
登錄后復制

它就是一個簡單的對象,為了看清楚這個對象的創建規則,我們舉個例子。 首先是我們寫的JSX:

<div class='class_name' id='id_name' key='key_name' ref='ref_name'>     <span>Tom</span>     <span>Jerry</span> </div>
登錄后復制

它會被Babel編譯為:

React.createElement("div", {     class: "class_name",     id: "id_name",     key: "key_name",     ref: "ref_name"}, React.createElement("span", null, "Tom"), React.createElement("span", null, "Jerry"));
登錄后復制

它會生成這樣一個Element

{     $$typeof: REACT_ELEMENT_TYPE,     type:'div',     key: 'key_name',     ref: "ref_name",     props: {         class: "class_name",         id: "id_name",         children: [             React.createElement("span", null, "Tom"),             React.createElement("span", null, "Jerry")         ]     }      _owner: ReactCurrentOwner.current,}
登錄后復制

  • $$typeof 是一個常量,所有通過React.createElement生成的元素都有這個值。一般使用 React 的組件都是掛到父組件的 this.props.children 上面,但是也有例外,比如要實現一個模態框,就需要將模態框掛載到body節點下,這個時候需要使用ReactDOM.createPortals(child, container)這個函數實現,這個函數生成的$$typeof值就是REACT_PORTAL_TYPE。

  • type指代這個ReactElement的類型

  • key和ref都是從config對象中找到的特殊配置,將其單獨抽取出來,放在ReactElement下

  • props包含了兩部分,第一部分是去除了key和ref的config,第二部分是children數組,數組的成員也是通過React.createElement生成的對象,示例中省略了這個步驟。

  • _owner在16.7的版本上是Fiber,Fiber是react16+版本的核心,暫時不做深究。

通過這篇文章,我們了解到,JSX中的HTML節點,在Babel的幫助下,轉換為嵌套的ReactElement對象,這些信息對于后期構建應用的樹結構時非常重要的,而React通過提供這些類型的數據,來脫離平臺的限制。

推薦學習:《react視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
日韩精品亚洲aⅴ在线影院| 成人午夜在线| 国产精品香蕉| 欧美日一区二区在线观看| 人人精品人人爱| 亚洲一区日韩在线| 亚洲三级av| 日韩精品欧美成人高清一区二区| 性欧美精品高清| 一区二区三区国产在线| 亚洲视频国产| 青青国产精品| 久久精品二区亚洲w码| 亚洲欧美日本国产专区一区| 免费日韩av片| 欧美日韩一区二区三区在线电影| 日韩黄色在线观看| 日韩精品三区四区| 精品国产一区二区三区av片| 日韩国产欧美| 亚洲不卡av不卡一区二区| 久久久久中文| 97精品国产福利一区二区三区| 日韩一区欧美| 综合激情网站| 久久亚洲一区| 另类小说一区二区三区| 久久精品不卡| 国产日韩欧美在线播放不卡| 黄色在线观看www| 亚洲开心激情| 天堂8中文在线最新版在线| 999久久久亚洲| 亚洲精品成a人ⅴ香蕉片| 精品久久久中文字幕| 美女久久网站| 日韩欧美视频专区| 日韩精品导航| 亚洲激情av| 欧美freesex黑人又粗又大| 一区在线观看| 日韩专区精品| 久久麻豆视频| 欧美一区=区三区| 国产一区导航| 久久久久久黄| sm捆绑调教国产免费网站在线观看 | 卡一卡二国产精品| 久久电影一区| 99成人在线视频| 日韩1区在线| 国产精品毛片久久久| 亚洲综合小说| 日韩精品一区第一页| 免费视频亚洲| 伊人精品一区| 日韩精品免费一区二区三区| 99久久婷婷| 99视频精品全国免费| av资源新版天堂在线| 亚洲天堂免费| 国产精品毛片久久| 日韩欧美一区免费| 久久三级中文| 你懂的国产精品永久在线| 日韩成人av影视| 欧美亚洲自偷自偷| 国产欧美另类| 精品国产乱码久久久久久樱花| 国产一区调教| 四虎国产精品免费观看| 久久国产成人午夜av影院宅| 日本大胆欧美人术艺术动态| 国产精品美女午夜爽爽| av亚洲免费| 久久亚洲视频| 国产精品一区2区3区| 国产精品天天看天天狠| zzzwww在线看片免费| 亚洲第一区色| 日韩精品高清不卡| 日韩国产综合| 日韩精品第一| 午夜av成人| 久久黄色影视| 国产成人精品一区二区免费看京 | 亚洲最新无码中文字幕久久| 日韩va亚洲va欧美va久久| 亚洲一区二区三区久久久| 色吊丝一区二区| 欧美+亚洲+精品+三区| 国产亚洲福利| 久久99精品久久久久久园产越南 | 国产精品久久久久久久久免费高清| 国产一区导航| 久久香蕉网站| 91成人精品| 欧美日韩精品一本二本三本| 欧美.日韩.国产.一区.二区| 国产美女久久| 日韩精品欧美大片| 日韩中文字幕| 日韩avvvv在线播放| 日韩中文字幕一区二区高清99| 国产精品a级| 综合激情一区| 日本久久黄色| 91亚洲国产高清| 精品国产中文字幕第一页| 美女被久久久| 秋霞国产精品| 性色一区二区| 91精品一区二区三区综合| 黄色亚洲免费| 91精品国产经典在线观看| 欧美国产偷国产精品三区| 午夜亚洲精品| 久久精品高清| 97久久亚洲| 中文在线不卡| 美女尤物久久精品| 国产调教精品| 极品av在线| 日韩视频网站在线观看| 国产精品13p| 日韩在线卡一卡二| 色一区二区三区| 国产精品自拍区| 久久美女精品| 成人精品亚洲| 亚洲精品福利电影| 久久久亚洲一区| 777久久精品| 成人一区而且| 国产videos久久| 亚洲综合精品| 国产精品亚洲综合久久| 久久免费黄色| 国产高清亚洲| 国产精品www.| 日韩不卡在线观看日韩不卡视频| 激情91久久| 午夜精品影院| 一区二区精品伦理...| 蜜桃一区二区三区在线| 丰满少妇一区| 日日摸夜夜添夜夜添国产精品| 日韩天堂在线| 久久夜夜操妹子| 999在线观看精品免费不卡网站| 久久婷婷丁香| 亚洲午夜av| 国产午夜精品一区在线观看| 韩国一区二区三区视频| 黑丝一区二区| 日本不卡一区二区三区| 99视频精品视频高清免费| 另类欧美日韩国产在线| 国产精品网在线观看| 另类综合日韩欧美亚洲| 精品视频一区二区三区在线观看 | 久久精品资源| 日本a级不卡| 亚洲我射av| 久久久9色精品国产一区二区三区| 日本a级不卡| 中文在线不卡| 亚洲综合丁香| 免费精品视频| 国产精品流白浆在线观看| 麻豆中文一区二区| 在线观看免费一区二区| 国产精品久久久久久模特| 欧美精选一区二区三区| 日韩三区免费| 韩国精品主播一区二区在线观看 | 日本伊人久久| 国产视频一区二区在线播放| 亚洲一区二区免费在线观看| 国产精品白丝一区二区三区| 日韩伦理一区| 国产视频一区在线观看一区免费| 午夜日韩av| 欧美精品一区二区久久| 久久精品在线| 亚洲一区免费| 日韩精品视频一区二区三区| 国产精品2区| 在线亚洲一区| 国产精品99精品一区二区三区∴| 亚洲电影在线一区二区三区| 久久久久国产| 模特精品在线| 欧美日韩亚洲三区| 国产一区二区三区不卡视频网站 | 国产成人精品一区二区三区在线| 中文字幕日本一区二区| 国产毛片精品| 青青青免费在线视频| 激情视频一区二区三区|