国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

前端UI開發(fā)框架:React的介紹

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 20:13:12
文檔

前端UI開發(fā)框架:React的介紹

前端UI開發(fā)框架:React的介紹:基于HTML的前端界面開發(fā)正變得越來越復(fù)雜,其本質(zhì)問題基本都可以歸結(jié)于如何將來自于服務(wù)器端或者用戶輸入的動(dòng)態(tài)數(shù)據(jù)高效的反映到復(fù)雜的用戶界面上。而來自Facebook的React框架正是完全面向此問題的一個(gè)解決方案,按官網(wǎng)描述,其出發(fā)點(diǎn)為:用于開發(fā)數(shù)據(jù)不斷變
推薦度:
導(dǎo)讀前端UI開發(fā)框架:React的介紹:基于HTML的前端界面開發(fā)正變得越來越復(fù)雜,其本質(zhì)問題基本都可以歸結(jié)于如何將來自于服務(wù)器端或者用戶輸入的動(dòng)態(tài)數(shù)據(jù)高效的反映到復(fù)雜的用戶界面上。而來自Facebook的React框架正是完全面向此問題的一個(gè)解決方案,按官網(wǎng)描述,其出發(fā)點(diǎn)為:用于開發(fā)數(shù)據(jù)不斷變

基于HTML的前端界面開發(fā)正變得越來越復(fù)雜,其本質(zhì)問題基本都可以歸結(jié)于如何將來自于服務(wù)器端或者用戶輸入的動(dòng)態(tài)數(shù)據(jù)高效的反映到復(fù)雜的用戶界面上。而來自Facebook的React框架正是完全面向此問題的一個(gè)解決方案,按官網(wǎng)描述,其出發(fā)點(diǎn)為:用于開發(fā)數(shù)據(jù)不斷變化的大型應(yīng)用程序(Building large applications with data that changes over time)。相比傳統(tǒng)型的前端開發(fā),React開辟了一個(gè)相當(dāng)另類的途徑,實(shí)現(xiàn)了前端界面的高效率高性能開發(fā)。

首先,對(duì)于React,有一些認(rèn)識(shí)誤區(qū),這里先總結(jié)一下:

  • React不是一個(gè)完整的MVC框架,最多可以認(rèn)為是MVC中的V(View),甚至React并不非常認(rèn)可MVC開發(fā)模式;

  • React的服務(wù)器端Render能力只能算是一個(gè)錦上添花的功能,并不是其核心出發(fā)點(diǎn),事實(shí)上React官方站點(diǎn)幾乎沒有提及其在服務(wù)器端的應(yīng)用;

  • 有人拿React和Web Component相提并論,但兩者并不是完全的競(jìng)爭(zhēng)關(guān)系,你完全可以用React去開發(fā)一個(gè)真正的Web Component;

  • React不是一個(gè)新的模板語言,JSX只是一個(gè)表象,沒有JSX的React也能工作。

  • 1. React的原理

    在Web開發(fā)中,我們總需要將變化的數(shù)據(jù)實(shí)時(shí)反應(yīng)到UI上,這時(shí)就需要對(duì)DOM進(jìn)行操作。而復(fù)雜或頻繁的DOM操作通常是性能瓶頸產(chǎn)生的原因(如何進(jìn)行高性能的復(fù)雜DOM操作通常是衡量一個(gè)前端開發(fā)人員技能的重要指標(biāo))。React為此引入了虛擬DOM(Virtual DOM)的機(jī)制:在瀏覽器端用Javascript實(shí)現(xiàn)了一套DOM API。基于React進(jìn)行開發(fā)時(shí)所有的DOM構(gòu)造都是通過虛擬DOM進(jìn)行,每當(dāng)數(shù)據(jù)變化時(shí),React都會(huì)重新構(gòu)建整個(gè)DOM樹,然后React將當(dāng)前整個(gè)DOM樹和上一次的DOM樹進(jìn)行對(duì)比,得到DOM結(jié)構(gòu)的區(qū)別,然后僅僅將需要變化的部分進(jìn)行實(shí)際的瀏覽器DOM更新。而且React能夠批處理虛擬DOM的刷新,在一個(gè)事件循環(huán)(Event Loop)內(nèi)的兩次數(shù)據(jù)變化會(huì)被合并,例如你連續(xù)的先將節(jié)點(diǎn)內(nèi)容從A變成B,然后又從B變成A,React會(huì)認(rèn)為UI不發(fā)生任何變化,而如果通過手動(dòng)控制,這種邏輯通常是極其復(fù)雜的。盡管每一次都需要構(gòu)造完整的虛擬DOM樹,但是因?yàn)樘摂MDOM是內(nèi)存數(shù)據(jù),性能是極高的,而對(duì)實(shí)際DOM進(jìn)行操作的僅僅是Diff部分,因而能達(dá)到提高性能的目的。這樣,在保證性能的同時(shí),開發(fā)者將不再需要關(guān)注某個(gè)數(shù)據(jù)的變化如何更新到一個(gè)或多個(gè)具體的DOM元素,而只需要關(guān)心在任意一個(gè)數(shù)據(jù)狀態(tài)下,整個(gè)界面是如何Render的。

    如果你像在90年代那樣寫過服務(wù)器端Render的純Web頁面那么應(yīng)該知道,服務(wù)器端所要做的就是根據(jù)數(shù)據(jù)Render出HTML送到瀏覽器端。如果這時(shí)因?yàn)橛脩舻囊粋€(gè)點(diǎn)擊需要改變某個(gè)狀態(tài)文字,那么也是通過刷新整個(gè)頁面來完成的。服務(wù)器端并不需要知道是哪一小段HTML發(fā)生了變化,而只需要根據(jù)數(shù)據(jù)刷新整個(gè)頁面。換句話說,任何UI的變化都是通過整體刷新來完成的。而React將這種開發(fā)模式以高性能的方式帶到了前端,每做一點(diǎn)界面的更新,你都可以認(rèn)為刷新了整個(gè)頁面。至于如何進(jìn)行局部更新以保證性能,則是React框架要完成的事情。

    借用Facebook介紹React的視頻中聊天應(yīng)用的例子,當(dāng)一條新的消息過來時(shí),傳統(tǒng)開發(fā)的思路如上圖,你的開發(fā)過程需要知道哪條數(shù)據(jù)過來了,如何將新的DOM結(jié)點(diǎn)添加到當(dāng)前DOM樹上;而基于React的開發(fā)思路如下圖,你永遠(yuǎn)只需要關(guān)心數(shù)據(jù)整體,兩次數(shù)據(jù)之間的UI如何變化,則完全交給框架去做。

    可以看到,使用React大大降低了邏輯復(fù)雜性,意味著開發(fā)難度降低,可能產(chǎn)生Bug的機(jī)會(huì)也更少。至于React如何做到將原來O(n^3)復(fù)雜度的Diff算法降低到O(n),大家可以參考這篇文章。

    2. 組件化的開發(fā)思路

    虛擬DOM不僅帶來了簡(jiǎn)單的UI開發(fā)邏輯,同時(shí)也帶來了組件化開發(fā)的思想,所謂組件,即封裝起來的具有獨(dú)立功能的UI部件。React推薦以組件的方式去重新思考UI構(gòu)成,將UI上每一個(gè)功能相對(duì)獨(dú)立的模塊定義成組件,然后將小的組件通過組合或者嵌套的方式構(gòu)成大的組件,最終完成整體UI的構(gòu)建。例如,F(xiàn)acebook的instagram.com整站都采用了React來開發(fā),整個(gè)頁面就是一個(gè)大的組件,其中包含了嵌套的大量其它組件,大家有興趣可以看下它背后的代碼。

    如果說MVC的思想讓你做到視圖-數(shù)據(jù)-控制器的分離,那么組件化的思考方式則是帶來了UI功能模塊之間的分離。我們通過一個(gè)典型的Blog評(píng)論界面來看MVC和組件化開發(fā)思路的區(qū)別。

    對(duì)于MVC開發(fā)模式來說,開發(fā)者將三者定義成不同的類,實(shí)現(xiàn)了表現(xiàn),數(shù)據(jù),控制的分離。開發(fā)者更多的是從技術(shù)的角度來對(duì)UI進(jìn)行拆分,實(shí)現(xiàn)松耦合。

    對(duì)于React而言,則完全是一個(gè)新的思路,開發(fā)者從功能的角度出發(fā),將UI分成不同的組件,每個(gè)組件都獨(dú)立封裝。

    在React中,你按照界面模塊自然劃分的方式來組織和編寫你的代碼,對(duì)于評(píng)論界面而言,整個(gè)UI是一個(gè)通過小組件構(gòu)成的大組件,每個(gè)組件只關(guān)心自己部分的邏輯,彼此獨(dú)立。這樣最外層的界面的Render只需要如下代碼:

    通過這種方式,每個(gè)組件的UI和邏輯都定義在組件內(nèi)部,和外部完全通過API來交互,通過組合的方式來實(shí)現(xiàn)復(fù)雜的功能。React認(rèn)為一個(gè)組件應(yīng)該具有如下特征:

    (1)可組合(Composeable):一個(gè)組件易于和其它組件一起使用,或者嵌套在另一個(gè)組件內(nèi)部。如果一個(gè)組件內(nèi)部創(chuàng)建了另一個(gè)組件,那么說父組件擁有(own)它創(chuàng)建的子組件,通過這個(gè)特性,一個(gè)復(fù)雜的UI可以拆分成多個(gè)簡(jiǎn)單的UI組件;

    (2)可重用(Reusable):每個(gè)組件都是具有獨(dú)立功能的,它可以被使用在多個(gè)UI場(chǎng)景;

    (3)可維護(hù)(Maintainable):每個(gè)小的組件僅僅包含自身的邏輯,更容易被理解和維護(hù);

    (4)可測(cè)試(Testable):因?yàn)槊總€(gè)組件都是獨(dú)立的,那么對(duì)于各個(gè)組件分別測(cè)試顯然要比對(duì)于整個(gè)UI進(jìn)行測(cè)試容易的多。

    3. 一個(gè)React組件開發(fā)的例子:Tab選擇器

    上面從總體上介紹了React帶來的全新的前端開發(fā)方法,以及其帶來的影響,并沒有介紹如何使用。為了讓大家對(duì)其有一個(gè)具體的印象,這里實(shí)際來開發(fā)一個(gè)簡(jiǎn)單的組件:Tab選擇器。網(wǎng)店的產(chǎn)品頁面通常需要這樣的控件來選擇產(chǎn)品屬性,例如選擇衣服的顏色。這個(gè)控件接受一個(gè)數(shù)據(jù)源展示多個(gè)Tab供點(diǎn)擊,點(diǎn)擊后就選中了某個(gè)顏色,界面通常如下圖所示。

    按傳統(tǒng)方式,我們可以用如下代碼來實(shí)現(xiàn)一個(gè)jQuery插件:

    用React方式,代碼如下:

    通過比較可以看到,jQuery插件方式,開發(fā)者首先需要考慮控件第一次Render出來時(shí)的DOM構(gòu)建;其次,需要知道如何切換UI上的選中狀態(tài)。

    而React的方式,開發(fā)者僅僅需要考慮整體界面的DOM構(gòu)建,不再需要關(guān)心局部更新,每次在一個(gè)React的Component上調(diào)用setState方法,都會(huì)觸發(fā)render來重建整個(gè)界面。從開發(fā)思想的角度看,你可以認(rèn)為每次數(shù)據(jù)的更新都會(huì)做整體的完全刷新。邏輯簡(jiǎn)單而直接。

    如果我們?cè)俣嗫紤]一步,控件的值不只在初始化和點(diǎn)擊時(shí)可以設(shè)置,而且還可以通過程序動(dòng)態(tài)的去設(shè)置。那么對(duì)于jQuery的方案而言,我們需要額外的方法和入口去做對(duì)應(yīng)的UI更新。而對(duì)于React方式,則無需做任何改變,外部只需調(diào)用setState方法改變它的狀態(tài)即可。這就是簡(jiǎn)化UI邏輯帶來的好處。

    完整的代碼和演示已上傳在Github上: https://github.com/supnate/react-tab-selector ,大家可以實(shí)際試用一下。

    4. 結(jié)論

    如上所述,React是一個(gè)全新思路的前端UI框架,它完全接管了UI開發(fā)中最為復(fù)雜的局部更新部分,擅長(zhǎng)在在復(fù)雜場(chǎng)景下保證高性能;同時(shí),它引入了基于組件的開發(fā)思想,從另一個(gè)角度來重新審視UI的構(gòu)成。通過這種方法,不僅能夠提高開發(fā)效率,而且可以讓代碼更容易理解,維護(hù)和測(cè)試。Facebook以這樣一種方式將沉淀多年的前端開發(fā)經(jīng)驗(yàn)和技術(shù)的積累完全開源出來,值得所有前端開發(fā)者去借鑒和學(xué)習(xí)。并且React在發(fā)布一年的時(shí)間里就獲得了極大的關(guān)注,Github上擁有超過1萬的Star,相信其對(duì)前端開發(fā)的方向,甚至Web Component的標(biāo)準(zhǔn),都將產(chǎn)生一定的影響。

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    前端UI開發(fā)框架:React的介紹

    前端UI開發(fā)框架:React的介紹:基于HTML的前端界面開發(fā)正變得越來越復(fù)雜,其本質(zhì)問題基本都可以歸結(jié)于如何將來自于服務(wù)器端或者用戶輸入的動(dòng)態(tài)數(shù)據(jù)高效的反映到復(fù)雜的用戶界面上。而來自Facebook的React框架正是完全面向此問題的一個(gè)解決方案,按官網(wǎng)描述,其出發(fā)點(diǎn)為:用于開發(fā)數(shù)據(jù)不斷變
    推薦度:
    標(biāo)簽: 開發(fā) ui 前端
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲欧美另类第一页 | 国产欧美久久一区二区 | 欧美第一精品 | 四虎影视最新网址 | 亚洲欧美视频在线观看 | 欧美日韩在线观看视频 | 99久久国产综合精品成人影院 | 欧美精品一区二区三区视频 | 国产欧美视频在线观看 | 国产高清不卡一区二区 | 国产精品1234区 | 亚洲一区二区三区四区视频 | 青青国产成人久久激情91麻豆 | 在线播放国产一区二区三区 | 久久精品视频一区二区三区 | 国产在线视频在线观看 | 91精品久久久久久久久网影视 | 国产精品久久亚洲一区二区 | 欧美日韩中字 | 国产欧美一区二区精品久久久 | 日韩电影一区二区 | 免费视频精品一区二区 | 欧美精品一区二区三区视频 | 国产成人久久久精品毛片 | 久久精品123 | 亚洲第一页在线视频 | 国产高清免费在线观看 | 一区二区精品视频 | 国产成人精品一区二三区2022 | 国内精品久久久久久久97牛牛 | 欧美一区二区三区大片 | 五月天中文字幕 | 亚洲第一页在线观看 | 国产成人精品综合久久久 | 日韩专区一区 | 国外欧美一区另类中文字幕 | 99视频九九精品视频在线观看 | 日韩免费视频网站 | 欧美日本日韩aⅴ在线视频 欧美日韩91 | 久久免费精品国产72精品剧情 | 亚洲欧美国产精品第1页 |