日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

React基礎(chǔ)-JSX的本質(zhì)-虛擬DOM的創(chuàng)建過(guò)程實(shí)例分析

瀏覽:333日期:2022-06-09 17:59:17

JSX的本質(zhì)

實(shí)際上,jsx僅僅只是 React.createElement(component, props, ...children) 這個(gè)函數(shù)的語(yǔ)法糖

所有的jsx最終都會(huì)被轉(zhuǎn)換成React.createElement的函數(shù)調(diào)用。

createElement需要傳遞三個(gè)參數(shù):

參數(shù)一:type

當(dāng)前元素的類型;

如果是標(biāo)簽元素,那么就使用字符串表示, 例如 “div”;

如果是組件元素,那么就直接使用組件的名稱;

參數(shù)二:config

所有jsx中的屬性都在config中以對(duì)象的屬性和值的形式存儲(chǔ);

比如傳入className作為元素的class;

參數(shù)三:children

存放在標(biāo)簽中的內(nèi)容,以children數(shù)組的方式進(jìn)行存儲(chǔ);

當(dāng)然,如果是多個(gè)元素呢?React內(nèi)部有對(duì)它們進(jìn)行處理,處理的源碼在下方

我們知道默認(rèn)jsx是通過(guò)babel幫我們進(jìn)行語(yǔ)法轉(zhuǎn)換的,所以我們之前寫(xiě)的jsx代碼都需要依賴babel; 我們可以在babel的官網(wǎng)中快速查看轉(zhuǎn)換的過(guò)程: 鏈接: https://babeljs.io/repl/#?presets=react

例如有下面這樣一段jsx代碼

class App extends React.Component {  constructor() {    super()  }  render() {    return (      <div><div className="header">Header</div><div className="content">  <div>Banner</div>    <ul>    <li>輪播圖1</li>    <li>輪播圖2</li>    <li>輪播圖3</li>    <li>輪播圖4</li>    <li>輪播圖5</li>  </ul></div><div className="footer">Footer</div>      </div>    )  }}const app = ReactDOM.createRoot(document.querySelector("#app"))app.render(<App/>)

那么也就是說(shuō)我們可以自己來(lái)編寫(xiě)React.createElement代碼:

我們沒(méi)有通過(guò)jsx來(lái)書(shū)寫(xiě)了,界面依然是可以正常的渲染。

另外,在我們編寫(xiě)原生的React情況下,我們就不需要babel相關(guān)的內(nèi)容了(當(dāng)然真實(shí)開(kāi)發(fā)中我們是不會(huì)編寫(xiě)原生的React的)

  • 所以,type="text/babel"可以被我們刪除掉了;
  • 所以,<script src="../react/babel.min.js"></script>也可以被我們刪除掉了;
<div></div><script src="../lib/../lib/react.js"></script><script src="../lib/react-dom.js"></script><script>  class App extends React.Component {    constructor() {      super()    }    render() {      const element = React.createElement("div", null, /*#__PURE__*/React.createElement("div", {  className: "header"}, "Header"), /*#__PURE__*/React.createElement("div", {  className: "content"}, /*#__PURE__*/React.createElement("div", null, "Banner"), /*#__PURE__*/React.createElement("ul", null, /*#__PURE__*/React.createElement("li", null, "\u8F6E\u64AD\u56FE1"), /*#__PURE__*/React.createElement("li", null, "\u8F6E\u64AD\u56FE2"), /*#__PURE__*/React.createElement("li", null, "\u8F6E\u64AD\u56FE3"), /*#__PURE__*/React.createElement("li", null, "\u8F6E\u64AD\u56FE4"), /*#__PURE__*/React.createElement("li", null, "\u8F6E\u64AD\u56FE5"))), /*#__PURE__*/React.createElement("div", {  className: "footer"}, "Footer"));return element    }  }  const app = ReactDOM.createRoot(document.querySelector("#app"))  app.render(React.createElement(App, null))</script>

虛擬DOM的創(chuàng)建過(guò)程

我們通過(guò) React.createElement 最終創(chuàng)建出來(lái)一個(gè) ReactElement對(duì)象:

這個(gè)ReactElement對(duì)象是什么作用呢?React為什么要?jiǎng)?chuàng)建它呢?

原因是React利用ReactElement對(duì)象組成了一個(gè)JavaScript的對(duì)象樹(shù);

JavaScript的對(duì)象樹(shù)就是虛擬DOM(Virtual DOM);

如何查看ReactElement的樹(shù)結(jié)構(gòu)呢?

我們可以將上面代碼中的jsx返回結(jié)果進(jìn)行打印;

**而ReactElement最終形成的樹(shù)結(jié)構(gòu)就是虛擬DOM (Virtual DOM) **;

虛擬DOM幫助我們從命令式編程轉(zhuǎn)到了聲明式編程的模式

React官方的說(shuō)法:Virtual DOM 是一種編程理念

在這個(gè)理念中,UI以一種理想化或者說(shuō)虛擬化的方式保存在內(nèi)存中,并且它是一個(gè)相對(duì)簡(jiǎn)單的JavaScript對(duì)象

我們可以通過(guò)root.render讓 虛擬DOM 和 真實(shí)DOM同步起來(lái),這個(gè)過(guò)程中叫做協(xié)調(diào)(Reconciliation);

這種編程的方式賦予了React聲明式的API:

你只需要告訴React希望讓UI是什么狀態(tài);

React來(lái)確保DOM和這些狀態(tài)是匹配的;

你不需要直接進(jìn)行DOM操作,就可以從手動(dòng)更改DOM、屬性操作、事件處理中解放出來(lái);

PS:筆者在進(jìn)行相關(guān)測(cè)試或開(kāi)發(fā)的時(shí)候比較喜歡實(shí)用vite搭建vue或react的運(yùn)行環(huán)境,使用命令 npm init vite@latest 創(chuàng)建基本的項(xiàng)目框架,再進(jìn)行相關(guān)調(diào)試。

理解虛擬DOM有助于我們更加深入的理解react、vue等框架的運(yùn)行原理。

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
正在播放日韩精品| 国产色99精品9i| 欧美精品国产| 亚洲深深色噜噜狠狠爱网站 | 成人免费电影网址| 欧美韩日一区| 亚洲不卡av不卡一区二区| 欧美日韩一区二区三区四区在线观看 | а√天堂8资源中文在线| 综合干狼人综合首页| 午夜久久福利| 日本欧美在线看| 五月激激激综合网色播| 亚洲另类黄色| 日韩高清欧美激情| 91亚洲无吗| 国产亚洲精品精品国产亚洲综合| 国产精品久久久免费| 久久精品国产在热久久| 91欧美在线| 国产探花在线精品一区二区| 日韩二区三区四区| 老司机精品在线| av日韩中文| 美女少妇全过程你懂的久久| 亚洲一区免费| 深夜日韩欧美| 国产调教一区二区三区| 福利一区视频| 免费精品国产的网站免费观看| 狠狠久久婷婷| 欧美日韩xxxx| 日韩深夜视频| 久久国产99| 久久不见久久见免费视频7 | 国产成人精品一区二区三区免费| 日韩一区欧美| 久久国产成人| 欧美日韩一区二区国产| 久久亚洲黄色| 日韩精品麻豆| 亚洲va久久| 精品久久97| 激情五月综合| 青青伊人久久| 久久天堂av| 在线观看亚洲精品福利片| 国产精品s色| 精品视频国产| 男女性色大片免费观看一区二区| 美女视频网站久久| av不卡在线| 你懂的网址国产 欧美| 在线视频日韩| 精品一区av| 国产精品日韩| 国产精品久久乐| 日韩国产一区| 亚州欧美在线| 亚洲成人国产| 欧美日韩一区自拍| 激情综合激情| 久久的色偷偷| 亚洲日本网址| 国产精品tv| 日韩欧美美女在线观看| 欧美黄色网页| 国产精品三级| 亚州av乱码久久精品蜜桃| 国产日韩免费| 亚洲精品2区| 久久精品福利| 亚洲欧美高清| av亚洲一区二区三区| 热久久久久久| 黑丝一区二区三区| 日韩av免费大片| 91亚洲精品视频在线观看 | 欧美成a人国产精品高清乱码在线观看片在线观看久 | 欧洲毛片在线视频免费观看| 国产精品主播在线观看| 午夜亚洲福利在线老司机| 日韩大片在线播放| 日韩综合在线| 麻豆国产一区| 精品五月天堂| 国产精品成人3p一区二区三区| 亚洲一区区二区| 麻豆视频观看网址久久| 亚洲影视一区二区三区| 欧美一区二区三区高清视频| 精品三级在线观看视频| 国产亚洲精品美女久久| 91久久视频| 欧美色图国产精品| 日韩高清不卡| 久久久精品午夜少妇| 日韩黄色大片网站| 中文字幕在线视频网站| 成人在线超碰| 美女尤物国产一区| 久久精品国产亚洲aⅴ | 久久xxxx| 亚洲欧洲一区二区天堂久久| 99精品国产一区二区三区| 色综合狠狠操| 国产在线观看www| 国产一区二区三区四区| 国产一区二区三区黄网站| 麻豆精品视频在线观看视频| 国产精选久久| 免费视频一区二区三区在线观看| 国产精品一卡| 欧美成人精品午夜一区二区| 老鸭窝一区二区久久精品| 国产探花一区在线观看| 国产精品99久久久久久董美香| 日韩精品91亚洲二区在线观看| 免费在线观看成人| 亚洲精品在线二区| 国产精品一线| 国内自拍视频一区二区三区| 亚洲成人va| 美女精品网站| 国产欧美在线观看免费| 国产一区二区三区四区二区| 91欧美日韩| 激情综合在线| 亚洲va久久| 国产suv精品一区二区四区视频 | 福利欧美精品在线| 免费一二一二在线视频| 国产精品av久久久久久麻豆网| 女同性一区二区三区人了人一| 亚洲香蕉久久| 精品三级国产| 女人天堂亚洲aⅴ在线观看| 中文字幕免费一区二区| 九九九精品视频| 免费av一区二区三区四区| 日本在线不卡视频一二三区| 欧美国产免费| 欧美亚洲在线日韩| 午夜日本精品| 日韩欧美久久| 黑人精品一区| 亚洲视频电影在线| 久久亚州av| 九九综合九九| 911精品国产| 久久久夜精品| 18国产精品| 婷婷成人综合| 国产精品男女| 午夜日本精品| 麻豆一区二区三| 中文久久精品| 欧美1区二区| 美女毛片一区二区三区四区| 欧美日韩调教| 狠狠色狠狠色综合日日tαg| 国产精品一站二站| 妖精视频成人观看www| 精品国产精品国产偷麻豆| 欧美午夜不卡| 精品一区二区男人吃奶 | 国产a久久精品一区二区三区| 9国产精品视频| 91亚洲自偷观看高清| 一本综合精品| 欧美二区视频| 久久精品国产精品亚洲毛片| 群体交乱之放荡娇妻一区二区| 日韩高清一区| 在线亚洲观看| 成人看片网站| 久久av资源| 日韩欧美中文字幕电影| 欧美日韩国产精品一区二区亚洲| 久久亚州av| 日本视频一区二区| 欧美日韩国产综合网| 色综合五月天| 国产精品亲子伦av一区二区三区| 一区二区亚洲精品| 久久婷婷激情| 高清一区二区| 欧美一区二区三区免费看| 99在线|亚洲一区二区| 国产粉嫩在线观看| 麻豆91小视频| 青青草国产成人99久久| 日本 国产 欧美色综合| 欧美精品一区二区三区精品| 91亚洲国产高清| 久久精品国产久精国产爱| 国产欧美二区| 亚洲综合激情在线| 亚洲免费影院| 久久高清一区|