和面試官聊 React

你了解React嗎

了解,React是facebook搞出來的一個(gè)輕量級(jí)的組件庫,用于解決前端視圖層的一些問題,就是MVC中V層的問題瓦呼,它內(nèi)部的Instagram網(wǎng)站就是用React搭建的。

React解決了什么問題

我覺得解決了三個(gè)問題测暗,一個(gè)是組件復(fù)用問題央串,一個(gè)是性能問題,還有一個(gè)碗啄,如果也算的話质和,就是兼容性問題:

1、組件復(fù)用問題:在React之前的一些前端框架稚字,比如Anguar饲宿,bootstrap等,寫出來的組件胆描,都是能夠使用在瀏覽器端瘫想,雖然可以在各個(gè)web系統(tǒng)中復(fù)用,但是沒有辦法跨平臺(tái)復(fù)用昌讲,比如運(yùn)用在android或IOS的原生應(yīng)用上国夜。

但是React就可以,我們使用React寫出來的組件剧蚣,結(jié)合React-dom可以顯示在瀏覽器上支竹,結(jié)合React-native可以顯示在android、IOS原生應(yīng)用上鸠按,可以讓我們的組件礼搁,一次編寫,處處運(yùn)行目尖,幫助我們避免大量的重復(fù)勞動(dòng)馒吴。

而且因?yàn)镽eact是facebook推出來的,本身它的思想又很先進(jìn)瑟曲,所以在前端領(lǐng)域很快就火了起來饮戳,有大量的開發(fā)來構(gòu)建整個(gè)的環(huán)境,那么基于React也是出現(xiàn)了很多比較好用的組件庫洞拨,比如螞蟻金服的ant.design以及React-Bootstrap扯罐,基于這些組件庫,我們?cè)谧鲩_發(fā)的時(shí)候烦衣,可以極大的節(jié)省我們的開發(fā)成本歹河。

2、性能問題:在之前的開發(fā)當(dāng)中花吟,如果頁面的某個(gè)組件發(fā)生了變化

比如我們修改了Jim Green的名字秸歧,那我們需要提交修改請(qǐng)求,然后把用戶列表信息重新獲取一遍衅澈,最后把表格從頭到尾渲染一遍键菱,我們注意到,整個(gè)過程中今布,Joe Black等用戶信息所在的行经备,其實(shí)沒有發(fā)生過變化,它的重新渲染其實(shí)是你沒有必要的部默,而且渲染又是非常耗時(shí)的弄喘。

React做的一件事情,就是對(duì)于每個(gè)組件甩牺,它在內(nèi)存里生成一棵虛擬dom樹蘑志,當(dāng)組件發(fā)生變化的時(shí)候,它會(huì)生成一顆新的虛擬dom樹贬派,然后和老的進(jìn)行比較急但,找出有差異的節(jié)點(diǎn),然后只更新發(fā)生變化的dom節(jié)點(diǎn)搞乏,所以更新的成本會(huì)比較小波桩,性能也會(huì)更好。

3请敦、瀏覽器兼容問題:React對(duì)瀏覽器的兼容也做了一些工作:

主要是在事件方面镐躲,我們知道储玫,各個(gè)瀏覽器的事件處理有可能不一致,比如取消事件冒泡:

 event = event || window.event;
    
//取消事件的默認(rèn)行為
if (event.preventDefault) { // firefox
    event.preventDefault();
} else { // IE 瀏覽器
    event.returnValue = false;
}

React使用SyntheticEvent萤皂,包裝和規(guī)范了原生的瀏覽器事件撒穷,這樣各個(gè)瀏覽器的事件行為都能夠得到統(tǒng)一。

React的協(xié)議問題你了解嗎

React遵循的協(xié)議是“BSD許可證 + 專利開源協(xié)議”裆熙,這個(gè)協(xié)議比較奇葩端礼,如果你的產(chǎn)品跟facebook沒有競爭關(guān)系,你可以自由的使用react入录,但是如果有競爭關(guān)系蛤奥,你的react的使用許可將會(huì)被取消。

這也導(dǎo)致很多的大公司僚稿,比如百度凡桥、阿里巴巴、google蚀同、微軟等唬血,禁止公司內(nèi)部的項(xiàng)目使用React,不過16年阿里巴巴出了一個(gè)類似的做三端統(tǒng)一的前端框架唤崭,叫Weex拷恨,據(jù)說還不錯(cuò),抗住了雙十一的壓力谢肾,還有這個(gè)項(xiàng)目已經(jīng)成功的入住Apache孵化器了腕侄,這也表示,在協(xié)議方面芦疏,是不會(huì)有React那種問題的冕杠。

了解shouldComponentUpdate嗎

React虛擬dom技術(shù)要求不斷的將dom和虛擬dom進(jìn)行diff比較,如果dom樹比價(jià)大酸茴,這種比較操作會(huì)比較耗時(shí)分预,因此React提供了shouldComponentUpdate這種補(bǔ)丁函數(shù),如果對(duì)于一些變化薪捍,如果我們不希望某個(gè)組件刷新笼痹,或者刷新后跟原來其實(shí)一樣,就可以使用這個(gè)函數(shù)直接告訴React酪穿,省去diff操作凳干,進(jìn)一步的提高了效率。

React這種虛擬dom機(jī)制對(duì)于局部數(shù)據(jù)變動(dòng)的更新非常有效被济,而組件整體更新的場景發(fā)生的概率又比較小救赐,所以總的來說是非常不錯(cuò)的,像Vue組件更新以前用的是依賴收集的方式只磷,后來發(fā)現(xiàn)经磅,好像沒有React那么高效泌绣,所以在2.1.x版本的時(shí)候,也改成了虛擬dom的方式预厌。

你剛剛提到了依賴收集阿迈,那什么是依賴收集呢

如上面的這段Vue代碼,在模板中我們并沒有使用text3這個(gè)屬性配乓,當(dāng)我們對(duì)text1、text2進(jìn)行賦值的時(shí)候惠毁,Vue會(huì)刷新模板犹芹,但是如果我們對(duì)text3進(jìn)行賦值的時(shí)候,就不會(huì)刷新鞠绰,為什么呢腰埂?因?yàn)槭褂昧艘蕾囀占?/p>

簡單來說當(dāng)Vue渲染模板的時(shí)候,會(huì)讀取text1蜈膨、text2這兩個(gè)變量屿笼,這個(gè)時(shí)候就會(huì)調(diào)用它們的getter函數(shù),然后在getter里面會(huì)把text1翁巍、text2收集到收集器里驴一,等到對(duì)text1text2賦值的時(shí)候灶壶,會(huì)判斷他們是否在收集器里肝断,如果在就會(huì)更新模板,否則就不做處理驰凛,這個(gè)就是所謂的依賴收集胸懈。

【未完待續(xù)...】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市恰响,隨后出現(xiàn)的幾起案子趣钱,更是在濱河造成了極大的恐慌,老刑警劉巖胚宦,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件首有,死亡現(xiàn)場離奇詭異,居然都是意外死亡枢劝,警方通過查閱死者的電腦和手機(jī)绞灼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呈野,“玉大人低矮,你說我怎么就攤上這事”幻埃” “怎么了军掂?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵轮蜕,是天一觀的道長。 經(jīng)常有香客問我蝗锥,道長跃洛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮预柒,結(jié)果婚禮上淘这,老公的妹妹穿的比我還像新娘。我一直安慰自己细燎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布皂甘。 她就那樣靜靜地躺著玻驻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪偿枕。 梳的紋絲不亂的頭發(fā)上璧瞬,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音渐夸,去河邊找鬼嗤锉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛墓塌,可吹牛的內(nèi)容都是我干的档冬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼桃纯,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼酷誓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起态坦,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤盐数,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后伞梯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玫氢,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年谜诫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漾峡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喻旷,死狀恐怖生逸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤槽袄,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布烙无,位于F島的核電站,受9級(jí)特大地震影響遍尺,放射性物質(zhì)發(fā)生泄漏截酷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一乾戏、第九天 我趴在偏房一處隱蔽的房頂上張望迂苛。 院中可真熱鬧,春花似錦鼓择、人聲如沸三幻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赌髓。三九已至从藤,卻和暖如春催跪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夷野。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國打工懊蒸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悯搔。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓骑丸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妒貌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子通危,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359