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

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

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

瀏覽:338日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩中文字幕| 亚洲免费观看高清完整版在线观| 久久福利一区| 国产农村妇女精品一区二区| 天堂资源在线亚洲| 日韩精品永久网址| 群体交乱之放荡娇妻一区二区| 日韩在线短视频| 国产亚洲一区二区手机在线观看| 999国产精品永久免费视频app| 99精品美女| 蜜桃av一区| 国产精品一区高清| 久久精品国产精品亚洲毛片| 国产精品99久久精品| 成人在线视频免费| 亚洲一本视频| 国产欧美久久一区二区三区| 国产一区二区三区免费在线| 四季av一区二区凹凸精品| av资源中文在线| 视频福利一区| 国产一卡不卡| 91成人超碰| 国产欧美日韩精品一区二区免费| 欧美日韩18| 精品国模一区二区三区| 国产亚洲午夜| 乱一区二区av| 蜜臀av国产精品久久久久| 国产欧美日韩一级| 激情综合网址| 精品三级av在线导航| 精品亚洲成人| 亚洲免费观看| 中文字幕色婷婷在线视频| 国产h片在线观看| 国产日韩一区| 快she精品国产999| 精品网站999| 在线一区视频| 精品视频网站| 国产欧美自拍| 亚洲一区日韩在线| 日韩国产综合| 国产亚洲一区二区三区不卡| 97人人精品| 国产精品一线| 亚洲aa在线| 亚洲专区视频| 日韩一区精品字幕| 久久亚洲在线| 久久国产中文字幕| 福利一区二区免费视频| 嫩草伊人久久精品少妇av杨幂| 在线精品一区二区| 丝袜美腿一区二区三区| 久久美女性网| 精品视频在线观看网站| 国产精品xxx在线观看| 在线日韩成人| 在线观看免费一区二区| 国产日韩专区| 国产91精品对白在线播放| 欧美91福利在线观看| 久久久久亚洲| 色欧美自拍视频| 91欧美在线| 在线成人动漫av| 99国产成+人+综合+亚洲欧美| 成人精品亚洲| 婷婷亚洲五月色综合| 国产主播一区| 久久成人国产| 日韩一二三区在线观看| 亚洲精品福利| 日韩一区二区三区高清在线观看| 亚洲精品在线a| 久久国产日韩欧美精品| 狂野欧美性猛交xxxx| 老色鬼精品视频在线观看播放| 国产一区二区三区探花| 四虎4545www国产精品 | 欧美特黄一区| 日韩一区二区三区精品| 国产精品高清一区二区| 国产精品精品国产一区二区| 久久精品资源| 1000部精品久久久久久久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲精品欧美| av日韩中文| 日本不卡视频一二三区| sm捆绑调教国产免费网站在线观看| 亚洲视频电影在线| 麻豆精品少妇| 五月激激激综合网色播| 国产高清视频一区二区| 三级一区在线视频先锋| 日韩国产精品久久久| 亚洲综合在线电影| 欧美精品二区| 国产二区精品| 欧美激情网址| 亚洲美女91| 久久久777| 久久三级毛片| 亚洲开心激情| 日韩视频一区| 精品一区在线| 伊人久久国产| 欧美极品中文字幕| 日韩av中文字幕一区二区| 日韩中文在线播放| 蜜桃精品视频| 国产另类在线| 蜜桃视频在线观看一区二区| 精品国产欧美| 国产精品嫩草99av在线| 国产一区二区精品久| 老司机免费视频一区二区三区| 国产日产高清欧美一区二区三区 | www.九色在线| 国产日韩欧美一区在线| 亚洲香蕉网站| 欧美va天堂| 日产精品一区二区| 欧美精品国产| 亚洲日本久久| 亚洲精品大片| 日韩精品一区第一页| 欧美日韩日本国产亚洲在线 | 国产成人免费| 国产亚洲第一伦理第一区| 亚洲午夜免费| 视频一区二区欧美| 免费国产亚洲视频| 亚洲精品综合| 亚洲香蕉久久| 亚洲tv在线| 欧美aa在线视频| 精品视频一二| 三级精品视频| 日韩在线短视频| 国产亚洲午夜| 精品久久视频| 麻豆久久一区二区| 99久久亚洲精品蜜臀| 美女久久久久| 在线亚洲精品| 日韩精品五月天| 久久av电影| 高清久久精品| 蜜桃精品在线| 久久av在线| 国产午夜久久av| 中国字幕a在线看韩国电影| 九一国产精品| 亚洲精品三级| 91午夜精品| 亚洲涩涩在线| 日韩国产一二三区| 亚洲精品88| 最新日韩av| 久久精品三级| 在线观看亚洲精品福利片| 国产欧美在线| 亚洲一区黄色| 91国内精品| 久久久久蜜桃| 国产福利一区二区三区在线播放| 99久久精品国产亚洲精品| 亚洲精品进入| 日韩影院免费视频| 黄色在线网站噜噜噜| 亚洲精品九九| 一区在线视频观看| 国产理论在线| 麻豆91在线播放| 日韩激情一区二区| 久久99精品久久久野外观看| 亚洲免费成人| 亚洲福利精品| 国产精品久久久久久久免费软件| 亚洲一级影院| 午夜欧美精品久久久久久久| 亚洲成人免费| 日本免费一区二区三区四区| 国产精品一卡| 欧美一区精品| 日韩va欧美va亚洲va久久| 国产亚洲综合精品| 欧美午夜不卡| 欧美午夜不卡影院在线观看完整版免费| 国产精品白丝一区二区三区| 日韩专区视频网站| 婷婷精品在线| 日本不卡视频一二三区| 99国产精品久久久久久久| 午夜日韩av|