react 面試

react

redux (所有數(shù)據(jù)都放入redux管理)

1铐料、redux中間件原理(middleware)

  • 中間件提供第三方插件的模式,自定義攔截 action -> reducer 的過程。

  • 變?yōu)?action -> middlewares -> reducer役拴。

  • 這種機(jī)制可以讓我們改變數(shù)據(jù)流葫哗,實現(xiàn)如異步 action 作烟,action 過濾寺擂,日志輸出殉簸,異常報告等功能

  • 常見的中間件:

redux-logger:提供日志輸出

redux-thunk(async/await):處理異步操作

redux-promise:處理異步操作,actionCreator的返回值是promise

  • middleware作用:
    改裝dispatch

2沽讹、redux有什么缺點

  1. 一個組件所需要的數(shù)據(jù),必須由父組件(provider)傳過來武鲁,而不能像flux中直接從store取

  2. 當(dāng)一個組件相關(guān)數(shù)據(jù)更新時,即使父組件不需要用到這個組件,父組件還是會重新render及穗,可能會有效率影響坤检,或者需要寫復(fù)雜的shouldComponentUpdate進(jìn)行判斷。

react組件的劃分業(yè)務(wù)組件技術(shù)組件饲梭?

  1. 根據(jù)組件的職責(zé)通常把組件分為UI組件和容器組件乘盖。

  2. UI 組件負(fù)責(zé) UI 的呈現(xiàn),容器組件負(fù)責(zé)管理數(shù)據(jù)和邏輯憔涉。

  3. 兩者通過React-Redux 提供connect方法聯(lián)系起來订框。

具體使用可以參照如下鏈接:http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_three_react-redux.html

react生命周期函數(shù)

1. react性能優(yōu)化是哪個周期函數(shù)?

  • shouldComponentUpdate 這個方法用來判斷是否需要調(diào)用render方法重新描繪dom兜叨。

  • 因為dom的描繪非常消耗性能穿扳,如果我們能在shouldComponentUpdate方法中能夠?qū)懗龈鼉?yōu)化的dom diff算法衩侥,可以極大的提高性能。

為什么虛擬dom會提高性能?

虛擬dom相當(dāng)于在js和真實dom中間加了一個緩存矛物,利用dom diff算法避免了沒有必要的dom操作茫死,從而提高性能。

具體實現(xiàn)步驟如下:

  • 用 JavaScript 對象結(jié)構(gòu)表示 DOM 樹的結(jié)構(gòu)履羞;然后用這個樹構(gòu)建一個真正的 DOM 樹峦萎,插到文檔當(dāng)中

  • 狀態(tài)變更的時候,重新構(gòu)造一棵新的對象樹忆首。然后用新的樹和舊的樹進(jìn)行比較爱榔,記錄兩棵樹差異把2所記錄的差異應(yīng)用到步驟1所構(gòu)建的真正的DOM樹上,視圖就更新了

react性能優(yōu)化方案

  • key值相同, 就直接復(fù)用, 不用再創(chuàng)建虛擬DOM對象

jsx

什么是 JSX 和我們怎樣在 JavaScript 代碼中書寫它 —— 瀏覽器是如何識別它的雄卷?

  • JSX 只是一種 Facebook 普及的標(biāo)記語法搓蚪,受益于 Babel/TSC 這些工具

  • 我們能夠以一種更令賞心悅目的方式書寫 React.createElement 調(diào)用。

JSX 的技術(shù)原理以及隨之而來的限制;為什么甚至在我們的代碼并沒有使用 React 的情況下丁鹉,也需要在文件頂部 import React from 'react'妒潭;

為什么JSX中的組件名要以大寫字母開頭?

React 如何知道要渲染的是組件還是 HTML 元素就夠了揣钦。

解釋下“狀態(tài)提升(Context)”理念嗎?

  • 它允許你在兄弟組件間傳遞數(shù)據(jù)
  • 它允許你擁有更多純展示組件雳灾,更易復(fù)用

如果不能在組件間傳遞數(shù)據(jù),你怎樣給多級組件傳遞數(shù)據(jù):

簡述flux 思想

Flux 的最大特點冯凹,就是數(shù)據(jù)的"單向流動"谎亩。

1.用戶訪問 View

2.View 發(fā)出用戶的 Action

3.Dispatcher 收到 Action,要求 Store 進(jìn)行相應(yīng)的更新

4.Store 更新后宇姚,發(fā)出一個"change"事件

5.View 收到"change"事件后匈庭,更新頁面

受控組件與非受控組件 :

受控組件:

在HTML中,標(biāo)簽<input>浑劳、<textarea>阱持、<select>的值的改變通常是根據(jù)用戶輸入進(jìn)行更新。在React中魔熏,可變狀態(tài)通常保存在組件的狀態(tài)屬性中衷咽,并且只能使用 setState() 更新,而呈現(xiàn)表單的React組件也控制著在后續(xù)用戶輸入時該表單中發(fā)生的情況蒜绽,以這種由React控制的輸入表單元素而改變其值的方式镶骗,稱為:“受控組件”。

非受控組件:

表單數(shù)據(jù)由DOM本身處理躲雅。即不受setState()的控制鼎姊,與傳統(tǒng)的HTML表單輸入相似,input輸入值即顯示最新值(使用 ref從DOM獲取表單值)

用法:

受控和非受控元素都有其優(yōu)點,根據(jù)具體情況選擇此蜈。如果表單在UI反饋方面非常簡單即横,則對ref進(jìn)行控制是完全正確的,即使用非受控組件

diff 算法:

immutale + redux + pureComponent對項目性能優(yōu)化

調(diào)用 setState, 會發(fā)生什么

  • 兩種開發(fā)寫法 :
// 對象時簡寫:
setSate({
    age: this.state.age + 1
})
browser's 

// 官方推薦:
setState(()=>{
    age: this.state.age + 1
})
  • 由于setState是異步更新的所以, 當(dāng)連續(xù)點擊更新觸發(fā)setState, 導(dǎo)致數(shù)據(jù)變化過多
// 解決方法 :
setState((prevState)=>{
    age: this.state.age + 1
}, ()=>{
    
})

  • setState第二回調(diào), 是在setState的第一個回調(diào)頁面數(shù)據(jù)渲染后再調(diào)用
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裆赵,一起剝皮案震驚了整個濱河市东囚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌战授,老刑警劉巖页藻,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異植兰,居然都是意外死亡份帐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門楣导,熙熙樓的掌柜王于貴愁眉苦臉地迎上來废境,“玉大人,你說我怎么就攤上這事筒繁∝迹” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵毡咏,是天一觀的道長驮宴。 經(jīng)常有香客問我,道長呕缭,這世上最難降的妖魔是什么堵泽? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮恢总,結(jié)果婚禮上迎罗,老公的妹妹穿的比我還像新娘。我一直安慰自己片仿,他們只是感情好佳谦,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滋戳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啥刻。 梳的紋絲不亂的頭發(fā)上奸鸯,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音可帽,去河邊找鬼娄涩。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蓄拣。 我是一名探鬼主播扬虚,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼球恤!你這毒婦竟也來了辜昵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤咽斧,失蹤者是張志新(化名)和其女友劉穎堪置,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體张惹,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡舀锨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宛逗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坎匿。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖雷激,靈堂內(nèi)的尸體忽然破棺而出替蔬,到底是詐尸還是另有隱情,我是刑警寧澤侥锦,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布进栽,位于F島的核電站,受9級特大地震影響恭垦,放射性物質(zhì)發(fā)生泄漏快毛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一番挺、第九天 我趴在偏房一處隱蔽的房頂上張望唠帝。 院中可真熱鬧,春花似錦玄柏、人聲如沸襟衰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瀑晒。三九已至,卻和暖如春徘意,著一層夾襖步出監(jiān)牢的瞬間苔悦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工椎咧, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留玖详,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像蟋座,于是被迫代替她去往敵國和親拗踢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

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