成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網(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就充當了這樣一個角色,他在JSX代碼編譯時候?qū)⑵滢D(zhuǎn)換成JS文件,這樣瀏覽器就能解析了。

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

比如下面這行代碼:

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

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

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

HTML語法轉(zhuǎn)變成了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"));
登錄后復制

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

可以看出,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);
登錄后復制

React.createElement的第一個參數(shù)又變成了一個字符串。
這也就是我們在React中寫組件的時候,為什么會要求首字母大寫的原因,Babel在編譯的時候會將首字母小寫的組件視為原生的HTMl節(jié)點進行處理,如果我們將自定義組件首字母小寫,后續(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,   };
登錄后復制

它就是一個簡單的對象,為了看清楚這個對象的創(chuàng)建規(guī)則,我們舉個例子。 首先是我們寫的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 上面,但是也有例外,比如要實現(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)建應用的樹結(jié)構(gòu)時非常重要的,而React通過提供這些類型的數(shù)據(jù),來脫離平臺的限制。

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

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
少妇无码太爽了不卡视频在线看| 国产精品成人一区二区三区视频| 斑马视频电影免费观看| 成人片黄网站A毛片免费| 国产成人AV性色在线影院色戒| 国产精品自产Av一区二区三区 | 亚洲成在人线视AV| 亚洲情综合五月天| √天堂资源最新版中文资源最新版| 9丨精品妻人一区二区三区蜜桃| 波多野结衣av在线| 国产精品VIDEOS麻豆| 狠狠色丁香久久婷婷综合蜜芽五月 | JAVAPARSERHD夫妻| 高潮动态图啪啪吃奶图动态 | 嗯啊开小嫩苞HHH好深男男| 国产精品亚洲А∨无码播放 | 国产精品无码无卡在线观看久| 精二和精三的区别| 年轻夫妻把小孩哄睡后开监控| 日韩人妻无码一区2区3区里沙| 喜爱夜蒲在线观看| 伊人热热久久原色播放WWW| www.av无码| 国产乱妇乱子在线视频| 国产精品亚洲综合色区韩国| 粉嫩被粗大进进出出视频| 国产激情久久久久影院蜜桃AV| 门卫老头吮她的花蒂| 亚洲AV无码精品色午夜APP| 欧美肥妇BWBWBWBXX| 精品国产成人一区二区三区| 锕锕锕锕锕锕锕锕好疼小视频软件| 亚洲资源AV无码日韩AV无码| 小宝贝下面的小嘴流水了| 日韩熟妇αv无码激情视频| 久久国产精品成人片免费| 国产精品VIDEOSSEX久久发布| 啊轻点灬大JI巴太粗太长了欧美| 夜夜躁日日躁狠狠久久AV| 香蕉AV福利精品导航| 人妻办公室出轨上司HD院线| 久久久久久精品免费免费999| 国产精品一区二区国产馆蜜桃| 凹凸女BBWBBWBBWBBW| 2021精品久久久久精品免费网| 亚洲熟妇AV一区二区三区浪潮 | 亚洲国产成AV人天堂无码| 少妇扒开毛茸茸的B自慰| 日本高清视频色WWW色| 男男GV白嫩小受GV在线播放| 久久青青草原亚洲AV无码APP| 国产香蕉97碰碰视频VA碰碰看 | 女人带毛的真人图片| 麻豆精品一区二区综合AV| 久久99精品久久久久久HB无码| 黑人大雞巴XXOO视频| 国产精品一区二区AV| 成人免费无码精品国产电影| 啊轻点灬大JI巴太粗太长在线了 | 久久人人玩人妻潮喷内射人人| 精品国产AV一区二区三区| 交换配乱吟粗大SNS84O| 好爽好湿好硬好大免费视频| FREE国产粉嫩熟妇XXXHD| 免费无码AV污污污在线观看| 黑人狂桶女人高潮嗷嗷叫小说| 成在人线AV无码免费看网站直播| A级毛片无码久久精品免费| 成人A级毛片免费播放| 成熟老太毛茸茸BBWBBW| 野花社区日本韩国免费观看| 国产VA免费精品高清在线观看| 老师上课没戴奶罩看到奶头| 午夜亚洲AV永久无码精品| А√天堂8资源最新版| 久久国产精品99久久人人澡 | 日韩欧群交P片内射中文| 亚洲中文精品久久久久久不卡| 父母全家儿女大联欢第14集| 蜜芽亚洲AV无码精品国产| 亚洲成AV成人片在线观看| 丰满少妇人妻XXXXX| 欧美肥妇多毛BBW| 亚洲中文字幕AⅤ天堂| 国产婷婷成人久久Av免费高清| 日产精品一区二区| 7777久久亚洲中文字幕| 久久av蜜臀人妻一区二区三区| 五十路熟妇无码AV在线| 成熟丰满熟妇高潮XXXXX视频| 内射人妻深入内射| 一边做一边喷17P| 精产国品一二三产品在哪| 挺进去岳就不挣扎了在线观看| 暗交小拗女一区二区三区视频 | 熟妇高潮一区二区精| MM1313午夜视频在线观看| 乱中年女人伦AV三区| 亚洲日韩一区二区一无码| 国自产拍偷拍精品啪啪AV| 无码内射成人免费喷射| 国产 国语对白 露脸| 日本免码VA在线看免费最新| 99精品欧美一区二区三区| 麻花传媒MD0076沈芯语在线| 亚洲综合色丁香婷婷六月图片| 国农村精品国产自线拍| 五十路熟妇亲子交尾| 国产成人AV乱码在线观看| 色窝窝无码一区二区三区| 啊轻点灬大JI巴太粗太长了欧美| 欧美成人影院亚洲综合图| 14表妺好紧没带套18分钟| 乱色精品无码一区二区国产盗| 影音先锋亚洲AV少妇熟女| 久久九九精品国产AV片国产| 亚洲蜜桃无码视頻精品网| 精品蜜臀久久久久99网站| 亚洲国产精品久久久久秋霞小 | 国产福利一区二区三区在线视频| 日韩综合无码一区二区| 抽插丰满内射高潮视频| 日韩产品和欧美产品的区别| 成人免费A级毛片免费| 日韩久久久久久中文人妻| 成人无码区免费视频观看| 日韩乱码人妻无码中文字幕| 厨房人妻HD中文字幕69XX| 色噜噜AV亚洲色一区二区| 公天天吃我奶躁我| 我和子发生了性关系视频| 国产精品后入内射日本在线观看 | 亚洲AV无码日韩AV无码导航| 国精产品一区二区三区| 亚洲国产欧美在线综合| 精品亚洲国产成人AV在线| 亚洲色大成网站WWW久久九九| 精品人妻系列无码人妻漫画| 亚洲中文字幕久久精品无码A| 久久亚洲AV无码西西人体| 18大禁漫画吃奶羞羞漫画| 欧美大香线蕉线伊人久久| 被伴郎的内捧猛烈进出H| 少妇人妻无码精品视频APP| 国产精品久久久久9999小说| 亚洲AV无码国产精品久久| 久久A级毛片免费观看| 中文字幕高清免费日韩视频在线| 欧美黑人XXXX| 大肉大捧一进一出的视频| 午夜.DJ高清在线播放视频| 精产国品一二三产区9977| 又色又爽又黄的视频APP软件下 | 99RE6热视频这里只精品首页| 人妻少妇看A偷人无码| 国产成人AV一区二区三区| 性色AV一区二区三区无码 | 国产精品自产拍高潮在线观看| 亚洲国产成人久久综合碰| 久久亚洲精品无码AV红樱桃| FREE性VIDEOXXⅩ欧美| 视频在线一区二区| 黑人粗硬进入过程视频| 在厨房被C到高潮A毛片奶水 | 久久久免费无码成人影片| A级毛片免费网站| 太太其实你也很想要的对吧| 国内精品国内精品自线在拍| 一本一道波多野结衣AV一区| 欧美性猛交XXXX乱大交蜜桃| 国产成人精品无码A区在线观看| 亚洲AV无码国产丝袜在线观看| 久久人人爽爽爽人久久久| GOGO全球高清大胆国模摄影| 天黑黑影院在线观看免费中文| 激情都市 校园 人妻 武侠| 18禁美女裸身无遮挡免费网站| 日韩一区二区三区北条麻妃| 韩国女星潜规39集无删减| 中字年轻漂亮的儿媳BD| 入睡指南PO高干粟熹沉芙| 很黄很黄的曰批视频| 30分钟无遮挡机机对机机| 天干天干夜天干天天爽| 久爱WWW成人网免费视频| ZOMBIE老头SUPREME| 亚洲A∨无码一区二区| 免费SM虐女调教网站视频| 国产 字幕 制服 中文 在线 | 亚洲AⅤ中文无码字幕色下载软件 亚洲AⅤ中文无码字幕色本草 | 久久精品中文字幕无码| 波多野结衣 美乳人妻| 亚洲AV高潮黄色毛片| 女主被强迫侵犯H文| 国产老妇伦国产熟女老妇高清| 中文字幕亚洲综合久久| 无码AV动漫精品专区| 免费看老外操B视频| 国产精品亚洲欧美大片在线观看 |