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

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

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

更新元素渲染

我們想想加入我們想我們定義的元素,如何做?當(dāng)元素被創(chuàng)建后,目前是無法改變其內(nèi)容和屬性的。
一個(gè)元素就好像動(dòng)畫里的一幀,代表著頁面某一個(gè)時(shí)間點(diǎn)的樣子。
我們目前還沒學(xué)習(xí)state什么的,根據(jù)現(xiàn)有的知識(shí),我們想要更新頁面的方法只有創(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è)例子中,感覺上是每秒重新渲染一次,就應(yīng)該是根節(jié)點(diǎn)的所有內(nèi)容都會(huì)被替換重新渲染,我們可以打開控制臺(tái)查證,并不是如此。

image.png

我們看變化的只有時(shí)間,其他的并沒有變化。
事實(shí)上,React DOM 首先會(huì)比較元素內(nèi)容先后的不同,而在渲染過程中只會(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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

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