React 元素渲染學(xué)習(xí)

元素是構(gòu)成React應(yīng)用的最小單位,用來(lái)描述我們?cè)谄聊簧峡吹降膬?nèi)容:

const element = <h1>hello</h1>

與瀏覽器的DOM元素不同,React當(dāng)中的元素是普通的對(duì)象,React DOM可以確保瀏覽器DOM的數(shù)據(jù)內(nèi)容與React元素保持一致。

將元素渲染到DOM中

我們?cè)谝粋€(gè)HTML頁(yè)面中添加一個(gè)id="root"的根元素:
<div id="root"></div>在這個(gè)根元素中的所有內(nèi)容都將由React DOM來(lái)管理,我們將其稱(chēng)為“根”DOM節(jié)點(diǎn)。我們?cè)谟肦eact開(kāi)發(fā)應(yīng)用時(shí)一般只會(huì)定義一個(gè)根節(jié)點(diǎn)。如果我們是在一個(gè)已有的項(xiàng)目中引入React,我們可能會(huì)在不同的部分單獨(dú)定義React根節(jié)點(diǎn)。
渲染方法:ReactDOM.render();
我們將元素傳入這個(gè)方法,就可以將傳入的元素渲染到頁(yè)面上:

const element = <h1>Hello, world</h1>;
ReactDOM.render(
  element,
  document.getElementById('root')
);

更新元素渲染

我們想想加入我們想我們定義的元素,如何做?當(dāng)元素被創(chuàng)建后,目前是無(wú)法改變其內(nèi)容和屬性的。
一個(gè)元素就好像動(dòng)畫(huà)里的一幀,代表著頁(yè)面某一個(gè)時(shí)間點(diǎn)的樣子。
我們目前還沒(méi)學(xué)習(xí)state什么的,根據(jù)現(xiàn)有的知識(shí),我們想要更新頁(yè)面的方法只有創(chuàng)建一個(gè)新的元素,然后將它傳入渲染的方法中,重新渲染。
比如計(jì)數(shù)器:

function tick(){
  const element = (
    <div>
      <h1>Hello, world!</h1>
      <h2>It is {new Date().toLocaleTimeString()}.</h2>
    </div>
  );
ReactDom.render(
  element,
  document.getElementById('root')
);
}

setInterval(tick,1000);

這個(gè)例子,我們每秒傳入render一個(gè)元素,每秒重新渲染一次。
注意:實(shí)際上,大多數(shù)時(shí)候React應(yīng)用只會(huì)調(diào)用一次render方法,后續(xù)我們會(huì)繼續(xù)學(xué)習(xí)。

React只會(huì)更新必要的部分

在上一個(gè)例子中,感覺(jué)上是每秒重新渲染一次,就應(yīng)該是根節(jié)點(diǎn)的所有內(nèi)容都會(huì)被替換重新渲染,我們可以打開(kāi)控制臺(tái)查證,并不是如此。

image.png

我們看變化的只有時(shí)間,其他的并沒(méi)有變化。
事實(shí)上,React DOM 首先會(huì)比較元素內(nèi)容先后的不同,而在渲染過(guò)程中只會(huì)更新改變了的部分。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原教程內(nèi)容詳見(jiàn)精益 React 學(xué)習(xí)指南,這只是我在學(xué)習(xí)過(guò)程中的一些閱讀筆記,個(gè)人覺(jué)得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,953評(píng)論 1 18
  • 參考文章:深度剖析:如何實(shí)現(xiàn)一個(gè)Virtual DOM 算法 作者:戴嘉華React中一個(gè)沒(méi)人能解釋清楚的問(wèn)題——...
    waka閱讀 6,163評(píng)論 0 21
  • 安裝: 概述 React起源于FaceBook的內(nèi)部項(xiàng)目,因?yàn)樵摴緦?duì)市場(chǎng)上所有的JavaScript MVC框架...
    姒沝無(wú)痕閱讀 808評(píng)論 0 0
  • 萬(wàn)家燈闌,酒肴起,親朋各聚。 竹爆響,夜穹流彩,七色光縷。 幼愛(ài)老尊希久見(jiàn),適節(jié)克戒常思驥。 新春迎,宜簡(jiǎn)樸穩(wěn)平,...
    竹影燈閱讀 357評(píng)論 0 0
  • 01 三年前的春天,我跟浩花掉兩人工作一年的積蓄,買(mǎi)了一輛10萬(wàn)出頭的小汽車(chē)。 浩很喜歡開(kāi)車(chē),手癢的時(shí)候會(huì)去租車(chē)公...
    非媽當(dāng)家閱讀 482評(píng)論 0 1

友情鏈接更多精彩內(nèi)容