五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

10分鐘理解REACT概念

2021-06-28 15:53 作者:自由的加百利  | 我要投稿

注意:這篇文章假定你熟悉模板技術(shù),至少使用過像art-template或ejs這樣的簡單模板

當(dāng)然,這意味著你應(yīng)該具備一些JS基礎(chǔ),對DOM操作足夠熟練

同時(shí),這篇文章要求你具備基本的面向?qū)ο笏枷?,不清楚的可參考視頻教程(不懂裝懂系列)

由于React特殊語法要求,這篇文章要求你需要熟悉ES6的面向?qū)ο笳Z法


模板的作用?

例如下面這個(gè)模板:

我們準(zhǔn)備好一份數(shù)據(jù):

將數(shù)據(jù)填充至模板,生成HTML頁面:


當(dāng)數(shù)據(jù)頻繁改變時(shí),會帶來什么問題?

每一次數(shù)據(jù)改變,我們都需要將最新的數(shù)據(jù)重新填充模板

然后將生成的HTML文本重新append到頁面上進(jìn)行渲染

我們不禁要問:難道沒有更簡單的方式?

于是我們有了下面的解決方案:

如果我們能將模板與數(shù)據(jù)綁定在一起,當(dāng)數(shù)據(jù)變化時(shí)

自動填充模板并更新頁面。

這樣一來,我們只要操作數(shù)據(jù),頁面內(nèi)容就可以實(shí)時(shí)產(chǎn)生變化了。

這就是react這個(gè)基于模板技術(shù)的框架給我們帶來的好處。



React組件化到底是什么東西?

首先我們必須要先問一個(gè)問題。

什么是組件?

我們再回過頭看剛才的那個(gè)模板,它可以稱得上一個(gè)組件嗎?

雖然這個(gè)模板是可復(fù)用的,但把它叫做一個(gè)組件,恐怕還遠(yuǎn)遠(yuǎn)談不上。

為什么呢? 這還要看我們?nèi)绾蝸矶x,什么是組件?

所謂組件,指的是高度可復(fù)用的動態(tài)模板

而我們之前的模板,缺乏了3個(gè)重要的條件

  • 第一,它沒有做到數(shù)據(jù)綁定,當(dāng)數(shù)據(jù)改變時(shí),頁面不能夠自動更新。

  • 第二,它無法保存頁面中的交互動作。例如鼠標(biāo)的劃入、單擊事件等等。

  • 第三,模板和模板之間不能夠相互嵌套或引用,無法達(dá)到復(fù)用的最大化。

而React編寫的組件,搞定了上述所有問題。



為什么React標(biāo)準(zhǔn)語法推薦使用ES6?

這還得從我們的面向?qū)ο笏枷胝f起

我們都知道類和對象之間的關(guān)系

如果把類看作是一個(gè)模板,那么通過這個(gè)模板,我們可以無限次的 實(shí)例化(new)對象。

在面向?qū)ο螽?dāng)中,我們的類,就相當(dāng)于一個(gè)高度可復(fù)用的組件

于是就有了下面的語法

我們使用Class來定義一個(gè)組件,每個(gè)組件必須有一個(gè)render方法用來渲染頁面

而在render方法里,我們可以像往常一樣編寫我們的模板內(nèi)容 ↓↓↓

不僅如此,我們連單擊函數(shù)也保存在了組件當(dāng)中?↓↓↓

組件當(dāng)中的數(shù)據(jù),可以通過構(gòu)造函數(shù)來進(jìn)行傳遞。?↓↓↓

最后,我們通過ES6的模塊化語法,將該組件以模塊的形式暴露出去,讓別的組件可以引用。?↓↓↓

引入組件之后,我們可以像寫HTML標(biāo)簽?zāi)菢?,使用這個(gè)組件?↓↓↓

好了,以上就是一個(gè)React組件的標(biāo)準(zhǔn)寫法,是不是很簡單呢?


React中的虛擬DOM是怎么一回事?

回到我們之前說的數(shù)據(jù)綁定的問題上來

假設(shè),我們現(xiàn)在有一個(gè)組件,DOM結(jié)構(gòu)如下

目前,雖然React已經(jīng)可以做到,在數(shù)據(jù)改變時(shí),頁面可以自動的實(shí)時(shí)更新

但是?這仍然沒能解決一個(gè)問題

當(dāng)組件中任何一點(diǎn)小小的數(shù)據(jù)發(fā)生改變的時(shí)候,我們都需要將整個(gè)組件重新渲染一次,才能讓頁面更新。

這會給瀏覽器帶來巨大的工作負(fù)擔(dān),很顯然這也是不必要的。

于是,React引入了虛擬DOM技術(shù)

首先,在內(nèi)存中構(gòu)建一棵對象樹,這棵樹的結(jié)構(gòu)跟DOM結(jié)構(gòu)一致。

每個(gè)對象對應(yīng)一個(gè)DOM節(jié)點(diǎn),并保存這個(gè)節(jié)點(diǎn)的所有信息(理論上包括事件)

我們管這棵對象樹,也叫做虛擬DOM樹

接下來,當(dāng)數(shù)據(jù)發(fā)生改變的時(shí)候,

React會再次生成一棵新的虛擬DOM樹

接下來,React會掃描這兩棵虛擬DOM樹的節(jié)點(diǎn)

最終將所有發(fā)生改變的節(jié)點(diǎn)記錄下來

最終React會將發(fā)生改變的DOM節(jié)點(diǎn)做更新,而不會更新整個(gè)組件

這就是虛擬DOM提升性能的原理。

總結(jié)一下React的特點(diǎn):




10分鐘理解REACT概念的評論 (共 條)

分享到微博請遵守國家法律
巴中市| 江安县| 绩溪县| 正阳县| 周至县| 来安县| 泰安市| 河西区| 望江县| 潜江市| 昭通市| 玉龙| 朝阳区| 义马市| 大渡口区| 澳门| 垦利县| 台江县| 绥宁县| 纳雍县| 固镇县| 自贡市| 济南市| 竹溪县| 新乡县| 陆丰市| 哈密市| 永清县| 应用必备| 樟树市| 偃师市| 双桥区| 永福县| 汉寿县| 泰和县| 多伦县| 垦利县| 黄陵县| 游戏| 台安县| 汕尾市|