第三節(jié)——渲染元素

元素是React應(yīng)用的最小構(gòu)建塊咒循。

一個(gè)元素描述了你想要在屏幕上看到什么:

const element = <h1>Hello, world</h1>;

與瀏覽器DOM元素不同扶踊,React元素是純對(duì)象裙盾,并且創(chuàng)建的代價(jià)很小实胸。React DOM負(fù)責(zé)更新DOM去匹配React元素。

注意:

元素可能與更為熟知的"組件"的概念讓人覺(jué)得困惑番官,我們將會(huì)在下一章節(jié)介紹"組件"庐完。組件是由元素構(gòu)成的,我們推薦在閱讀接下來(lái)的章節(jié)之前先來(lái)閱讀本章節(jié)徘熔。

將一個(gè)元素渲染到DOM中

在你的HTML文件中的某個(gè)位置有一個(gè)<div>

<div id="root"></div>

我們把它稱(chēng)作根DOM節(jié)點(diǎn)假褪,因?yàn)樵谒锩娴娜魏螙|西都將會(huì)被React DOM進(jìn)行管理。

僅僅使用React技術(shù)來(lái)構(gòu)建的應(yīng)用通常有單個(gè)根DOM節(jié)點(diǎn)近顷。如果你正在把React融入進(jìn)一個(gè)已經(jīng)存在的應(yīng)用中生音,如果你愿意的話你可能會(huì)有許多個(gè)單獨(dú)的根DOM節(jié)點(diǎn)。

為了將一個(gè)React元素渲染到一個(gè)根DOM元素窒升,將它們傳入到ReactDOM.render():

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

它將在頁(yè)面上顯示"Hello, world"

更新已經(jīng)被渲染的React元素

React元素是不可以更改的缀遍。一旦你創(chuàng)建了一個(gè)元素,你不可以改變它的子元素或者屬性饱须。一個(gè)元素好比是電影中的一幀:它代表了在某一個(gè)確切的時(shí)間點(diǎn)的UI域醇。

我們現(xiàn)在已知的,唯一的方式去更新UI就是創(chuàng)建一個(gè)新的元素,并且將它傳入ReactDOM.render()方法譬挚。

思考一下這個(gè)時(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);

它會(huì)每一秒調(diào)用一次ReactDOM.render()方法從一個(gè)setInterval()回調(diào)中锅铅。

注意:
在實(shí)踐中,大多數(shù)React應(yīng)用只調(diào)用ReactDOM.render()方法一次减宣。在下一章節(jié)中盐须,我們將會(huì)學(xué)習(xí)到如何把這些代碼封裝到組件中。
我們推薦你不要跳過(guò)任何章節(jié)漆腌,因?yàn)樗鼈兌际腔ハ嘤新?lián)系的贼邓。

React只會(huì)在需要的時(shí)候更新

React DOM會(huì)把元素還有他的子節(jié)點(diǎn)與之前的那一個(gè)元素進(jìn)行對(duì)比,并且只會(huì)在必要的時(shí)候申請(qǐng)更新DOM到想要的狀態(tài)闷尿。

你可以在瀏覽器的開(kāi)發(fā)者工具中對(duì)上一個(gè)例子進(jìn)行核實(shí)塑径。

盡管我們創(chuàng)建了一個(gè)元素來(lái)描述整個(gè)UI樹(shù)在每一個(gè)瞬間應(yīng)該是什么樣子(Even though we create an element describing the whole UI tree on every tick),只有內(nèi)容中發(fā)生改變的文本節(jié)點(diǎn)被React DOM進(jìn)行了更新操作填具。

根據(jù)我們的經(jīng)驗(yàn)统舀,思考在某一個(gè)時(shí)刻UI應(yīng)該是什么樣子而不是將它隨著時(shí)間如何去改變?nèi)ハ淮蠖彦e(cuò)誤。(In our experience, thinking about how the UI should look at any given moment rather than how to change it over time eliminates a whole class of bugs.)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末劳景,一起剝皮案震驚了整個(gè)濱河市誉简,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枢泰,老刑警劉巖描融,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铝噩,死亡現(xiàn)場(chǎng)離奇詭異衡蚂,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)骏庸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)毛甲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人具被,你說(shuō)我怎么就攤上這事玻募。” “怎么了一姿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵七咧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我叮叹,道長(zhǎng)艾栋,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任蛉顽,我火速辦了婚禮蝗砾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己悼粮,他們只是感情好闲勺,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著扣猫,像睡著了一般菜循。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苞笨,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天债朵,我揣著相機(jī)與錄音,去河邊找鬼瀑凝。 笑死序芦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的粤咪。 我是一名探鬼主播谚中,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寥枝!你這毒婦竟也來(lái)了宪塔?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤囊拜,失蹤者是張志新(化名)和其女友劉穎某筐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體冠跷,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡南誊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜜托。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抄囚。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖橄务,靈堂內(nèi)的尸體忽然破棺而出幔托,到底是詐尸還是另有隱情,我是刑警寧澤蜂挪,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布重挑,位于F島的核電站,受9級(jí)特大地震影響棠涮,放射性物質(zhì)發(fā)生泄漏谬哀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一故爵、第九天 我趴在偏房一處隱蔽的房頂上張望玻粪。 院中可真熱鬧隅津,春花似錦、人聲如沸劲室。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)很洋。三九已至充蓝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喉磁,已是汗流浹背谓苟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留协怒,地道東北人涝焙。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像孕暇,于是被迫代替她去往敵國(guó)和親仑撞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 3. JSX JSX是對(duì)JavaScript語(yǔ)言的一個(gè)擴(kuò)展語(yǔ)法妖滔, 用于生產(chǎn)React“元素”隧哮,建議在描述UI的時(shí)候...
    pixels閱讀 2,839評(píng)論 0 24
  • 原教程內(nèi)容詳見(jiàn)精益 React 學(xué)習(xí)指南,這只是我在學(xué)習(xí)過(guò)程中的一些閱讀筆記座舍,個(gè)人覺(jué)得該教程講解深入淺出沮翔,比目前大...
    leonaxiong閱讀 2,843評(píng)論 1 18
  • HTML模版 之后出現(xiàn)的React代碼嵌套入模版中。 1. Hello world 這段代碼將一個(gè)一級(jí)標(biāo)題插入到指...
    ryanho84閱讀 6,245評(píng)論 0 9
  • 以下內(nèi)容是我在學(xué)習(xí)和研究React時(shí)曲秉,對(duì)React的特性采蚀、重點(diǎn)和注意事項(xiàng)的提取、精練和總結(jié)岸浑,可以做為React特性...
    科研者閱讀 8,242評(píng)論 2 21
  • 最近看了一本關(guān)于學(xué)習(xí)方法論的書(shū)搏存,強(qiáng)調(diào)了記筆記和堅(jiān)持的重要性瑰步。這幾天也剛好在學(xué)習(xí)React矢洲,所以我打算每天堅(jiān)持一篇R...
    gaoer1938閱讀 1,690評(píng)論 0 5