成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

React基礎-JSX的本質-虛擬DOM的創建過程實例分析

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

JSX的本質

實際上,jsx僅僅只是 React.createElement(component, props, ...children) 這個函數的語法糖

所有的jsx最終都會被轉換成React.createElement的函數調用。

createElement需要傳遞三個參數:

參數一:type

當前元素的類型;

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

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

參數二:config

所有jsx中的屬性都在config中以對象的屬性和值的形式存儲;

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

參數三:children

存放在標簽中的內容,以children數組的方式進行存儲;

當然,如果是多個元素呢?React內部有對它們進行處理,處理的源碼在下方

我們知道默認jsx是通過babel幫我們進行語法轉換的,所以我們之前寫的jsx代碼都需要依賴babel; 我們可以在babel的官網中快速查看轉換的過程: 鏈接: 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/>)

那么也就是說我們可以自己來編寫React.createElement代碼:

我們沒有通過jsx來書寫了,界面依然是可以正常的渲染。

另外,在我們編寫原生的React情況下,我們就不需要babel相關的內容了(當然真實開發中我們是不會編寫原生的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的創建過程

我們通過 React.createElement 最終創建出來一個 ReactElement對象:

這個ReactElement對象是什么作用呢?React為什么要創建它呢?

原因是React利用ReactElement對象組成了一個JavaScript的對象樹;

JavaScript的對象樹就是虛擬DOM(Virtual DOM);

如何查看ReactElement的樹結構呢?

我們可以將上面代碼中的jsx返回結果進行打印;

**而ReactElement最終形成的樹結構就是虛擬DOM (Virtual DOM) **;

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

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

在這個理念中,UI以一種理想化或者說虛擬化的方式保存在內存中,并且它是一個相對簡單的JavaScript對象

我們可以通過root.render讓 虛擬DOM 和 真實DOM同步起來,這個過程中叫做協調(Reconciliation);

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

你只需要告訴React希望讓UI是什么狀態;

React來確保DOM和這些狀態是匹配的;

你不需要直接進行DOM操作,就可以從手動更改DOM、屬性操作、事件處理中解放出來;

PS:筆者在進行相關測試或開發的時候比較喜歡實用vite搭建vue或react的運行環境,使用命令 npm init vite@latest 創建基本的項目框架,再進行相關調試。

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

標簽: JavaScript
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
精品国内二区三区| 99视频国产精品| 99re这里只有精品视频首页| 69久久夜色精品国产69蝌蚪网| 亚洲永久精品国产| 亚洲大胆视频| 国产精品欧美久久久久无广告 | caoporen国产精品视频| 91精品国产综合久久久久久漫画 | 国产精品91xxx| 欧美精品 日韩| 国产精品一区二区免费不卡 | 视频一区在线播放| 久久久999| 五月天婷婷综合| 久久久精品五月天| 肉丝袜脚交视频一区二区| 久久男女视频| 久久精品噜噜噜成人88aⅴ| 精品视频全国免费看| 国产美女主播视频一区| 日韩精品一区二区在线| 不卡大黄网站免费看| 久久精品水蜜桃av综合天堂| 91麻豆精东视频| 国产人成亚洲第一网站在线播放| 午夜精品婷婷| 中文字幕一区二区三区在线不卡| 亚洲国产欧美国产综合一区 | 欧美日韩精品电影| 国产一区91精品张津瑜| 日韩欧美123| 99久久99久久精品免费看蜜桃| 久久久久久久久久久黄色| 欧美视频福利| 亚洲人成亚洲人成在线观看图片| 99精品免费| 亚洲不卡在线观看| 欧美性受xxxx黑人xyx| 国产呦精品一区二区三区网站| 欧美大片免费久久精品三p| 色综合网站在线| 成人欧美一区二区三区白人| 欧美一区=区| 精品亚洲porn| 精品国产91九色蝌蚪| 你懂的网址国产 欧美| 中文字幕一区二区三| 国产区日韩欧美| 免费三级欧美电影| 日韩欧美一区二区三区在线| 色综合天天综合色综合av| 成人免费在线视频| 裸体一区二区| 黄色精品一二区| 久久精品一区二区| 一区二区高清视频| 免费的国产精品| 日韩午夜av电影| 欧美福利专区| 一区二区久久久久久| 欧美日韩亚洲高清一区二区| 国产iv一区二区三区| 国产精品视频观看| 亚洲制服少妇| 国内成人自拍视频| 国产精品免费av| 色婷婷精品久久二区二区蜜臀av| 国产v综合v亚洲欧| 成人欧美一区二区三区1314| 91福利国产精品| 波多野结衣中文一区| 亚洲乱码日产精品bd| 欧美日韩精品一区二区| 欧美日韩91| 日本不卡一二三| 久久影院视频免费| 欧美一级网站| 成人黄色软件下载| 亚洲午夜一二三区视频| 91精品国产aⅴ一区二区| 国内精品久久久久久久果冻传媒| 日本一不卡视频| 久久久91精品国产一区二区精品| 国产精品女主播一区二区三区| 国产成人亚洲综合a∨婷婷图片| 亚洲日本韩国一区| 欧美一级高清大全免费观看| 一本久道久久久| 国产一区 二区| 亚洲欧美乱综合| 91精品福利在线一区二区三区| 好看的亚洲午夜视频在线| 六月丁香综合在线视频| 国产精品人人做人人爽人人添| 欧美日韩精品一区二区三区四区 | 亚洲欧洲日韩综合二区| 韩国精品一区二区| 亚洲素人一区二区| 欧美一级欧美三级在线观看| 国产视频在线观看一区| 成人av在线一区二区三区| 亚洲亚洲精品在线观看| 久久网站最新地址| 在线免费不卡电影| 国产综合婷婷| 国产成人一级电影| 午夜精品福利视频网站 | 日韩福利电影在线| 国产情人综合久久777777| 欧美亚洲国产一卡| 在线播放日韩| 成人午夜大片免费观看| 午夜精品123| 中文字幕电影一区| 欧美日韩国产区一| 一本久久综合| 99精品视频在线免费观看| 青青草成人在线观看| 亚洲女同一区二区| 欧美精品一区二区久久久| 欧美三日本三级三级在线播放| 中文精品一区二区三区| 牛牛国产精品| 国产成人a级片| 奇米色777欧美一区二区| 亚洲精品视频在线观看网站| 久久婷婷国产综合精品青草| 欧美日韩在线免费视频| 亚洲中午字幕| 国产综合18久久久久久| 成人精品高清在线| 蜜桃久久久久久| 一区二区三区国产| 国产精品黄色在线观看| 26uuu亚洲婷婷狠狠天堂| 欧美巨大另类极品videosbest| 久久国产手机看片| 在线观看的日韩av| 色综合天天综合网天天看片| 国产不卡视频在线播放| 免费在线观看精品| 亚洲国产精品久久久男人的天堂| 国产精品久久久久久妇女6080| 2020国产成人综合网| 欧美一区二区三区的| 91黄色激情网站| 国产精品久久国产愉拍 | 激情偷乱视频一区二区三区| 天堂一区二区在线免费观看| 亚洲精品美国一| 国产精品美女www爽爽爽| 久久女同精品一区二区| 欧美一卡2卡3卡4卡| 欧美欧美欧美欧美| 欧美日韩一卡二卡三卡| 欧洲精品在线观看| 色88888久久久久久影院野外| 亚洲男女自偷自拍| 亚洲精品影视| 亚洲国产精品一区在线观看不卡 | 亚洲乱码精品一二三四区日韩在线| 国产午夜精品一区二区三区嫩草 | 国产精品一区二区三区99| 蜜桃视频在线一区| 视频在线观看91| 亚洲444eee在线观看| 亚洲国产美女搞黄色| 亚洲狠狠爱一区二区三区| 亚洲精品菠萝久久久久久久| 亚洲欧美另类久久久精品| 亚洲婷婷在线视频| 亚洲欧美日韩在线| 亚洲精品欧美激情| 一区二区三区在线看| 亚洲免费观看在线观看| 亚洲美女视频在线观看| 中文字幕色av一区二区三区| 中文字幕日本不卡| 亚洲免费观看高清| 亚洲综合av网| 天天影视涩香欲综合网| 日韩av一二三| 日本美女一区二区三区| 久久电影国产免费久久电影| 久久国产精品第一页| 国产一区二区剧情av在线| 国产成人精品免费| av网站一区二区三区| 97久久超碰精品国产| 欧美日韩一区在线播放| 亚洲调教视频在线观看| 亚洲激情网站| 噜噜噜91成人网| 在线观看亚洲精品| 欧美日本在线看| 26uuu久久天堂性欧美| 中文字幕欧美日本乱码一线二线| 亚洲男帅同性gay1069| 香蕉成人啪国产精品视频综合网|