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

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

react element什么意思

react element是“React.createElement”函數(shù)的返回值,即ReactElement;ReactElement的結(jié)構(gòu)是“const element = {Element $$typeof: REACT_ELEMENT_TYPE,key: key,ref: ref,props: props,_owner: owner, };”。

react element什么意思

本教程操作環(huán)境:Windows10系統(tǒng)、react16.9.0版、Dell G3電腦。

react element什么意思?

React源碼 | ReactElement

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

JSX

作為React的官方指定語法,JSX允許用戶在JS代碼中插入HTML代碼。但是,這種寫法瀏覽器是無法解析的。他們需要一個轉(zhuǎn)換器,Babel就充當(dāng)了這樣一個角色,他在JSX代碼編譯時候?qū)⑵滢D(zhuǎn)換成JS文件,這樣瀏覽器就能解析了。

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

比如下面這行代碼:

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

通過Babel轉(zhuǎn)換后生成的代碼是:

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

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

我們寫一個復(fù)雜點的例子:

<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"));
登錄后復(fù)制

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

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

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

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

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

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

ReactElement

通過Babel編譯后的JS代碼,頻繁出現(xiàn)React.createElement這個函數(shù)。這個函數(shù)的返回值就是ReactElement,通過上面的示例可以看出,React.createElement函數(shù)的入?yún)⒂腥齻€,或者說三類。

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

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

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

    • 方法就是functional Component

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

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

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

ReactElement的結(jié)構(gòu)是這樣的

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,   };
登錄后復(fù)制

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

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

它會被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"));
登錄后復(fù)制

它會生成這樣一個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,}
登錄后復(fù)制

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

  • type指代這個ReactElement的類型

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

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

  • _owner在16.7的版本上是Fiber,F(xiàn)iber是react16+版本的核心,暫時不做深究。

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

推薦學(xué)習(xí):《react視頻教程》

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
欧美日韩国产一区精品一区| 日韩欧美2区| 免费一级欧美片在线观看网站| 日韩精品免费视频人成 | 日韩精选在线| 欧美亚洲专区| 国产精品麻豆成人av电影艾秋 | 亚洲伊人av| 亚洲精品成人图区| 精品99在线| 日韩国产一区二区| 欧美1级日本1级| 国产精品嫩草99av在线| 亚洲小说春色综合另类电影| 日本不卡一区二区| 国产精品久久久久久久久久齐齐| 鲁大师精品99久久久| 国内揄拍国内精品久久| 日本高清不卡一区二区三区视频 | 日韩在线观看中文字幕| 国产另类在线| 精品国产一区二区三区2021| а√天堂中文在线资源8| 99久久久国产精品美女| 偷拍欧美精品| 日韩精品亚洲专区| 国产精品99在线观看| 久久人人99| 亚洲毛片在线| 久久久91麻豆精品国产一区| 久久久久国产精品一区三寸 | 久久精品主播| 免费精品视频在线| 国产精品nxnn| 99精品视频精品精品视频| 国产一区二区中文| 日韩av影院| 日本а中文在线天堂| 影院欧美亚洲| 国产乱码精品一区二区三区四区 | 麻豆久久一区二区| 99精品在线观看| 亚洲精品影视| 福利视频一区| 国产亚洲毛片| 国产精品嫩模av在线| 日韩一区欧美| 亚洲综合精品| 麻豆精品视频在线观看| 不卡av一区二区| 国产图片一区| 亚洲精品网址| 欧美aⅴ一区二区三区视频| 99久久久久久中文字幕一区| 欧美一区二区三区久久精品| av高清一区| 欧美日韩精品一区二区三区视频 | 午夜视频一区二区在线观看| 国产成人久久精品一区二区三区| 免费在线小视频| 亚洲a成人v| 久久久影院免费| 国产精品22p| 午夜在线精品偷拍| 久久精品三级| 蜜桃视频在线观看一区二区| 国产传媒av在线| 日本免费在线视频不卡一不卡二| se01亚洲视频 | 国产一区二区三区亚洲综合| 亚洲一区激情| 国产精品久久久久久久免费观看 | 欧美日韩水蜜桃| 国产精品久久久久久久久久白浆 | 日韩毛片在线| 国产精品久久久久久久久久久久久久久 | 国产精品成人一区二区网站软件| 欧美日韩国产高清电影| 精品视频97| 日本成人一区二区| 欧美日韩国产一区二区三区不卡| 久久久精品区| 日韩动漫一区| 喷白浆一区二区| 欧美成人精品三级网站| 国产精品99久久久久久董美香| 伊人久久大香伊蕉在人线观看热v| 日韩精品欧美激情一区二区| 国语精品一区| 国产精品久久久一区二区| 日韩一区二区三免费高清在线观看| 欧美日韩中文字幕一区二区三区| 久久一区亚洲| 国产精品羞羞答答在线观看| 天堂精品久久久久| 精品91久久久久| 99热国内精品| 日韩精品首页| 三级小说欧洲区亚洲区| 美女av一区| 国产精品亚洲欧美日韩一区在线| 日本不卡视频在线观看| 亚洲三级在线| 热久久久久久久| 久久av一区| 亚洲黄色在线| 尹人成人综合网| 在线一区电影| av一区二区高清| 欧美特黄视频| 亚洲在线成人| 97精品国产福利一区二区三区| 久久久久久久久成人| 欧美a在线观看| 国产精品videossex久久发布 | 免费在线观看一区二区三区| 亚洲精品在线观看91| 亚洲成人免费| 中文亚洲欧美| 天堂av在线一区| 久久午夜精品| 一区二区电影在线观看| 一本一道久久a久久| 日韩精选在线| 国产精品啊啊啊| 国产不卡精品| 久久精品国产一区二区| 精品国产网站| 岛国av在线播放| 91看片一区| 偷拍欧美精品| 免费在线看一区| 日韩av一区二| 麻豆精品久久| 日韩欧美一区二区三区在线视频| 亚洲人成在线网站| 激情久久中文字幕| 先锋影音久久久| 亚洲性视频在线| 日韩高清国产一区在线| 国产九一精品| 麻豆一区二区三| 群体交乱之放荡娇妻一区二区| 国产一区二区中文| 一区二区三区国产在线| 国产欧美日韩| 日韩av片子| 久久影视一区| 亚洲精品裸体| 久久亚洲资源中文字| 香蕉人人精品| 日韩午夜免费| 奇米777国产一区国产二区| 久久久久亚洲精品中文字幕| 久久中文亚洲字幕| 综合干狼人综合首页| 日韩一区免费| www在线观看黄色| 久久aⅴ国产紧身牛仔裤| 国产日本亚洲| 中文字幕在线官网| 亚洲欧美网站| 免费日韩成人| 欧美特黄a级高清免费大片a级| 日韩一区二区三免费高清在线观看| 久久亚州av| 亚洲一区二区三区免费在线观看 | 国产在线一区不卡| 欧美成人综合| 少妇精品久久久| 精品一区二区三区免费看| 99久久久久| 欧美视频一区| 亚洲91精品| 日韩成人午夜精品| 色婷婷久久久| 日本色综合中文字幕| 欧美精品资源| 婷婷精品在线观看| 日韩欧美一区二区三区免费观看| 中文字幕日韩欧美精品高清在线| 精品女同一区二区三区在线观看| 午夜av一区| 精品香蕉视频| 亚洲作爱视频| 精品福利久久久| 亚洲男人在线| 久久久水蜜桃av免费网站| 欧美亚洲免费| 激情欧美日韩一区| 国产精品啊啊啊| 免费久久99精品国产自在现线| 国产精品久久久久久妇女| 99日韩精品| 国产福利片在线观看| 日韩一区二区三免费高清在线观看| 激情国产在线| 日韩区一区二| 久久三级福利| 热久久久久久|