react 面試題集

React 中 keys 的作用是什么增拥?

用于追蹤哪些列表中元素被修改啄巧,添加,移除的輔助標(biāo)識(shí)掌栅,減少不必要的渲染

調(diào)用 setState 之后發(fā)生了什么秩仆?

  1. react 將傳入的參數(shù)與組件當(dāng)前的狀態(tài)合并調(diào)和
  2. 根據(jù)新的狀態(tài)構(gòu)建react元素?cái)?shù)并且重新渲染UI界面
  3. 在react得到元素樹后會(huì)自動(dòng)計(jì)算與之前的差異然后根據(jù)差異最小化重新渲染

react生命周期

  1. 初始化階段
    getDefaultProp:獲取實(shí)例默認(rèn)屬性
    getInitialState:獲取每個(gè)實(shí)例的初始化狀態(tài)
    componentWillMount: 組件即將被裝載渲染到頁(yè)面上
    render:生成虛擬DOM節(jié)點(diǎn)
    componentDidMount:組件真正被裝載
  2. 運(yùn)行中
    componentWillReceiveProps:組件將要收到屬性時(shí)調(diào)用
    shouldComponentUpdate: 組件在接受新的狀態(tài)或新屬性時(shí)調(diào)用可以return false 阻止render更新
    componentWillUpdate:組件即將跟新不能修改屬性和狀態(tài)
    render:組件重繪
  3. 銷毀階段
    componentWillUnmount:組件即將被銷毀

為什么虛擬DOM可以提高性能

虛擬DOM其實(shí)是在js和DOM之間加了一層緩存,利用dom diff算法避免沒必要的dom操作猾封,可以只更新變化的那部分視圖

react diff算法原理

  1. 把樹形結(jié)構(gòu)按層級(jí)分解澄耍,只比較同級(jí)元素
  2. 給列表結(jié)構(gòu)的每個(gè)單元添加唯一的key,方便比較
  3. react只會(huì)匹配相同class的組件
  4. 合并操作晌缘,調(diào)用setstate齐莲,react重新渲染對(duì)應(yīng)部分視圖

react構(gòu)建組件的方式

  1. react.createClass()
  2. es6 class
  3. 無(wú)狀態(tài)函數(shù)

react工作原理

react 會(huì)創(chuàng)建虛擬DOM當(dāng)組件中狀態(tài)發(fā)生改變的時(shí)候會(huì)通過reacr diff算法標(biāo)記虛擬DOM中的變化,調(diào)節(jié)更新DOM

React 中 Element 與 Component 的區(qū)別

element:所見內(nèi)容的數(shù)據(jù)結(jié)構(gòu)磷箕,對(duì)UI的描述铅搓,是通過jsx構(gòu)建的聲明式代碼片段
component: 接收參數(shù)輸入返回某個(gè)react element的函數(shù)或者類

類組件(Class component)和函數(shù)式組件(Functional component)

Class component:可以使用額外的功能,例如生命周期搀捷,組件自身狀態(tài)
Functional component: 僅僅是接受props星掰,并渲染到頁(yè)面也成為無(wú)狀態(tài)組件

react事件處理邏輯

為解決瀏覽器兼容性問題,react將瀏覽器原生事件都封裝成合成事件嫩舟,傳入設(shè)置的事件中氢烘,組合事件提供了和原生事件相同的接口不僅屏蔽了底層瀏覽器的差異性還保證了行為的一致性,react以單一事件監(jiān)聽的方式將所有的事件都發(fā)送到頂層做處理家厌,這樣React 在更新 DOM 的時(shí)候就不需要考慮如何去處理附著在 DOM 上的事件監(jiān)聽器播玖,最終達(dá)到優(yōu)化性能的目的。

refs

refs其實(shí)是訪問DOM元素或組件實(shí)例是安全門饭于,refs的值其實(shí)是一個(gè)回調(diào)函數(shù)蜀踏,接受底層DOM元素或者被掛載的組件實(shí)例作為它的第一實(shí)例

(在構(gòu)造函數(shù)中)調(diào)用 super(props) 的目的是什么

在 super() 被調(diào)用之前,子類是不能使用 this 的掰吕,在 ES2015 中果覆,子類必須在 constructor 中調(diào)用 super()。傳遞 props 給 super() 的原因則是便于(在子類中)能在 constructor 訪問 this.props殖熟。

狀態(tài)(state)和屬性(props)之間有何不同

  1. State 是一種數(shù)據(jù)結(jié)構(gòu)局待,用于組件掛載時(shí)所需數(shù)據(jù)的默認(rèn)值。State 可能會(huì)隨著時(shí)間的推移而發(fā)生突變,但多數(shù)時(shí)候是作為用戶事件行為的結(jié)果钳榨。
  2. props 由父組件傳遞給子組件舰罚,并且就子組件而言,props 是不可變的薛耻。組件不能改變自身的 props

受控組件和非受控組件

  1. 受控組件:包含表單元素的組件將會(huì)在 state 中追蹤輸入的值营罢,并且每次調(diào)用回調(diào)函數(shù)時(shí),如 onChange 會(huì)更新 state饼齿,確保數(shù)據(jù)來(lái)源的單一
  2. 非受控組件:不需要設(shè)置它的state屬性愤钾,而通過ref來(lái)操作真實(shí)的DOM。

為什么建議傳遞給 setState 的參數(shù)是一個(gè) callback 而不是一個(gè)對(duì)象

props和state 的更新可能是異步的候醒,不能依賴他們的值去計(jì)算下一個(gè)state

展示組件(Presentational component)和容器組件(Container component)之間有何不同

  1. 展示組件關(guān)心組件看起來(lái)是什么能颁。展示專門通過 props 接受數(shù)據(jù)和回調(diào),并且?guī)缀醪粫?huì)有自身的狀態(tài)倒淫,但當(dāng)展示組件擁有自身的狀態(tài)時(shí)伙菊,通常也只關(guān)心 UI 狀態(tài)而不是數(shù)據(jù)的狀態(tài)。
  2. 容器組件則更關(guān)心組件是如何運(yùn)作的敌土。容器組件會(huì)為展示組件或者其它容器組件提供數(shù)據(jù)和行為(behavior)镜硕,它們會(huì)調(diào)用 Flux actions,并將其作為回調(diào)提供給展示組件返干。容器組件經(jīng)常是有狀態(tài)的兴枯,因?yàn)樗鼈兪?其它組件的)數(shù)據(jù)源。

何為 JSX

JSX 是 JavaScript 語(yǔ)法的一種語(yǔ)法擴(kuò)展矩欠,并擁有 JavaScript 的全部功能财剖。JSX 生產(chǎn) React "元素",你可以將任何的 JavaScript 表達(dá)式封裝在花括號(hào)里癌淮,然后將其嵌入到 JSX 中躺坟。在編譯完成之后,JSX 表達(dá)式就變成了常規(guī)的 JavaScript 對(duì)象乳蓄,這意味著你可以在 if 語(yǔ)句和 for 循環(huán)內(nèi)部使用 JSX咪橙,將它賦值給變量,接受它作為參數(shù)虚倒,并從函數(shù)中返回它美侦。

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

小寫字母開頭: 內(nèi)置組件,HTML 元素魂奥,例如 <div>菠剩,<span>,會(huì)編譯成 React.createElement('div')捧弃。
大寫字母開頭:自定義組件或 JS 文件中導(dǎo)入的組件赠叼,例如 <Foo />擦囊,會(huì)編譯成 React.createElement(Foo)违霞。
JSX 語(yǔ)法依賴babel進(jìn)行解析
小寫字母開頭的 tagName 直接轉(zhuǎn)為 string 字符串嘴办;
JSX 中使用點(diǎn)語(yǔ)法時(shí),不管是大寫還是小寫买鸽,最終都會(huì)解析成對(duì)象和屬性涧郊,而不是字符串,也所以雖然 C[p] 和 C.p 一樣眼五,但是 JSX 中 <c.p /> 可以解析而 <c[p] /> 不行妆艘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市看幼,隨后出現(xiàn)的幾起案子批旺,更是在濱河造成了極大的恐慌,老刑警劉巖诵姜,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汽煮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡棚唆,警方通過查閱死者的電腦和手機(jī)暇赤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宵凌,“玉大人鞋囊,你說(shuō)我怎么就攤上這事∠贡梗” “怎么了溜腐?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瓜喇。 經(jīng)常有香客問我逗扒,道長(zhǎng),這世上最難降的妖魔是什么欠橘? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任矩肩,我火速辦了婚禮,結(jié)果婚禮上肃续,老公的妹妹穿的比我還像新娘黍檩。我一直安慰自己,他們只是感情好始锚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布刽酱。 她就那樣靜靜地躺著,像睡著了一般瞧捌。 火紅的嫁衣襯著肌膚如雪棵里。 梳的紋絲不亂的頭發(fā)上润文,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音殿怜,去河邊找鬼典蝌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛头谜,可吹牛的內(nèi)容都是我干的骏掀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柱告,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼截驮!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起际度,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤葵袭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后乖菱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坡锡,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年块请,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娜氏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡墩新,死狀恐怖贸弥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情海渊,我是刑警寧澤绵疲,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站臣疑,受9級(jí)特大地震影響盔憨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讯沈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一郁岩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缺狠,春花似錦问慎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至穷劈,卻和暖如春笼恰,著一層夾襖步出監(jiān)牢的瞬間踊沸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工社证, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逼龟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓猴仑,卻偏偏與公主長(zhǎng)得像审轮,于是被迫代替她去往敵國(guó)和親肥哎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辽俗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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

  • 作為一個(gè)合格的開發(fā)者,不要只滿足于編寫了可以運(yùn)行的代碼篡诽。而要了解代碼背后的工作原理崖飘;不要只滿足于自己的程序...
    六個(gè)周閱讀 8,448評(píng)論 1 33
  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南,這只是我在學(xué)習(xí)過程中的一些閱讀筆記杈女,個(gè)人覺得該教程講解深入淺出朱浴,比目前大...
    leonaxiong閱讀 2,835評(píng)論 1 18
  • 使用 create-react-app 快速構(gòu)建 React 開發(fā)環(huán)境 項(xiàng)目的目錄結(jié)構(gòu)如下: React JSX ...
    majun00閱讀 510評(píng)論 0 0
  • 以下內(nèi)容是我在學(xué)習(xí)和研究React時(shí),對(duì)React的特性达椰、重點(diǎn)和注意事項(xiàng)的提取翰蠢、精練和總結(jié),可以做為React特性...
    科研者閱讀 8,232評(píng)論 2 21
  • 核心力需要有目標(biāo)客戶廷支、獨(dú)特價(jià)值和組織執(zhí)行力! 制勝之理——?jiǎng)?chuàng)造核心能力栓辜! 優(yōu)術(shù):目標(biāo)客戶恋拍、獨(dú)特價(jià)值、系統(tǒng)支撐藕甩。致勝...
    _柏焱_閱讀 858評(píng)論 0 0