React最全面試題(持續更新)

1、react生命週期及相關用法


react生命週期分爲初始化階段、運行階段、銷燬階段。

(1) 初始化階段:

componentWillMount:實例掛載之前
Render:渲染組件
componentDidMount:實例掛載完成。一般在這個函數中與後臺進行初始化數據交互。

(2)運行階段:

componentWillReceiveProps:父組件改變時調用。
sholudComponentUpdate:主要是用來手動阻止組件渲染,一般在這個函數中做組件的性能優化。
componentWillUpdate:組件數據更新前調用
componentDidUpdate:組件數據更新完成時調用

(3)銷燬階段:

componentUnmount:銷燬階段。一般用來銷燬不用的變量或者是解除無用定時器以及解綁無用事件。防止內存泄漏問題。

2、React運行階段生命週期調用順序

componentWillReceiveProps–>shouldComponentUpdate --> componentWillupdate --> componentDidUpdate

3、react中key的作用

key是React中用於追蹤哪些列表中元素被修改、刪除或者被添加的輔助標識。在diff算法中,key用來判斷該元素節點是被移動過來的還是新創建的元素,減少不必要的元素重複渲染。

4、setState第二個參數的作用

因爲setState是一個異步的過程,所以說執行完setState之後不能立刻更改state裏面的值。如果需要對state數據更改監聽,setState提供第二個參數,就是用來監聽state裏面數據的更改,當數據更改完成,調用回調函數。

5、sass和less的區別

定義變量的符號不同,less是用@,sass使用$
變量的作用域不同,less在全局定義,就作用在全局,在代碼塊中定義,就作用於整哥代碼塊。而sass只作用域全局。
編譯環境不同,less在開發者環境編譯,sass在服務器環境下編譯。

6、vue和react的區別

1、react嚴格上針對的是mvc模式的view層,vue則是mvvm模式。
2、操作dom的方式不同,vue使用的是指令操作dom,react是通過js進行操作。
3、數據綁定不同,vue實現的是雙向綁定,react的數據流動是單向的。
4、react中state是不能直接改變的,需要使用setState改變。vue中的state不是必須的,數據主要是由data屬性在vue對象中管理的。

7、react中的高階函數

高階函數就是一個純js且沒有副作用的函數。
高階組件就是一個函數,且該函數接受一個組件作爲參數,並返回一個新的組件。
相關資料:https://blog.csdn.net/baidu_38151187/article/details/79884613

8、react生命週期中,最適合與服務端進行數據交互的是哪個函數

componentDidMount:在這個階段,實例和dom已經掛載完成,可以進行相關的dom操作。

9、react中組件傳值

父傳子(組件嵌套淺):父組件定義一個屬性,子組件通過this.props接收。
子傳父:父組件定義一個屬性,並將一個回調函數賦值給定義的屬性,然後子組件進行調用傳過來的函數,並將參數傳進去,在父組件的回調函數中即可獲得子組件傳過來的值。

10、react性能優化階段函數是哪一個?

shouldComponentUpdate

11、react性能優化的方案

(1)重寫shouldComponentUpdate來避免不必要的dom操作。
(2)使用 production 版本的react.js。
(3)使用key來幫助React識別列表中所有子組件的最小變化。

12、介紹一下webpack

webpack是一個前端模塊化打包工具,主要由入口,出口,loader,plugins四個部分。前端的打包工具還有一個gulp,不過gulp側重於前端開發的過程,而webpack側重於模塊,例如他會將css文件看作一個模塊,通過css-loader將css打包成符合css的靜態資源。

13、Es6中箭頭函數與普通函數的區別?

1.普通function的聲明在變量提升中是最高的,箭頭函數沒有函數提升
2.箭頭函數沒有this,arguments
3.箭頭函數不能作爲構造函數,不能被new,沒有property,
4.call和apply方法只有參數,沒有作用域

14、什麼是閉包?閉包有什麼危害?如何解決閉包帶來的危害?

簡單來說,閉包就是一個定義在函數內部的函數。因爲js中存在作用域的問題,所以在函數內部定義的變量在函數外部是沒有辦法直接獲取到。而閉包就是溝通函數內部和外部的橋樑,這樣在函數外部接可以得到函數內部的值。並且閉包可以實現函數屬性和方法的私有化。

閉包的危害:

因爲閉包會將內部變量儲存在內存中,如果長時間不清除的話會造成內存泄漏的問題,影響程序的性能。
解決方法:對於不使用的變量及時的清除。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章