react-常見面試題


1React中的key值的作用是什么?

react中key值主要是用來識別組件的,key值相同時,在后期操作的時候,react在創建key值相同的組件時,遇到key值相同的,不會重新創建;

有了key值之后,key值與組件就會形成一種對應的關系,react會根據key值來絕對組件的創建銷毀或者更新;

如果key值相同,組件的屬性發生了變化,這時組件不會被銷毀,只會對響應的屬性進行更新;

如果key值不同,那么組件會先被銷毀,之后再重新創建;


 

 2、react中的性能優化有哪些方式?

1)react通過操縱虛擬DOM,不進行節點操作,最大限度的減少與真實DOM的交互,這樣可以提高性能;

2)shouldComponentUpdate,在這個生命周期內,我們可以進行新舊兩個state和props的對比,如果數據沒有發生變化,這個函數就會返回false,這樣后面的生命周期就不會執行,render函數也不會重新渲染,這樣也可以提升性能;

3)immutable,immutable的特點就是不可修改,改變它的任何數據時,都會重新生成一個新的對象,修改只會在新生成的對象上修改,原數據不會發生改變,這樣就可以避免把所有節點都復制一遍,降低性能損耗;immutable的實現原理就是數據結構共享;


 

3、react中如何修改state中的數據?this.setState是同步的還是異步的?this.setState中的第二個參數的作用是什么?為什么是異步的?

1)通過this.setState來修改state中的數據;

2)this.setState是異步的;

3)其中有兩個參數,第一個參數是一個對象或者是一個函數(必須返回一個對象),

函數中的第一個值為(prevState),第二個參數是(prevProps)

例:
this.setState((prevState,prevProps)=>({ }))

4)為什么是異步的,一位state可以批量執行,也就是說當多個setState一起同時執行時會被合並,提高DOM的渲染效率;

5)this.setState什么時候是同步的?原生js綁定的事件,setTimeout/setInterval等,(就是不受react機制控制時)

6)this.setState本身其實是一個同步的,異步不是因為本身的運行機制或者代碼,而是因為他所在的合成事件和鈎子函數的調用順序在更新之前,導致函數內沒法立即拿到更新后的值,形成了所謂的異步,可以通過第二個參數中的callback拿到更新后的結果;


 

4、render函數什么時候會執行?

當this.setState發生變化時就會更新; 


 

5、this.setState執行后會執行哪些生命周期函數?

shouldComponentUpdate、componentWillUpdate、render、componentDidUpdate


 

6、call、apply、bind三者之間的區別?

call和apply都是直接調用函數的;

bind每次調用執行的時候都會返回一個新的函數體,新的函數體內部的this指向才是我們需要改變指向的this;


 

7、組件第一次加載時執行的生命周期有哪些?

constructor、componentWillMount、render、componentDidMount


 8、哪些生命周期會執行一次?

constructor、componentwillMount、componentDidMount、componentWillUnmount


9、哪些生命周期會執行多次?

render、componentWillReceiveProps、shouldComponentUpdate、componentWillUpdate、componentDidUpdate


10、當this.props執行后會執行哪些生命周期?

componentWillRecevieProps、shouldcomponentUpdate、componentWillUpdate、render、componentDidUpdate


11、當組件的key值發生變化時會執行哪些生命周期?

componentWillMount、constructor、componentWillMount、render、componentDidMount


12react中如何創建一個組件?

1)class 組件名稱  extends Component{ }

2)var App=React.createClass{ });

13react中如何定義自定義屬性,以及限制外部數據的類型?

自定義屬性:

組件名稱.defaultProps={

key:val,

}

限制外部數據類型:引入第三方依賴propsTypes;

組件名稱.propsTypes={

key:propsTypes.類型

}

14react中常用的路由配置項?

BrowserRouter 路由根組件,路徑不帶#號history路由
HashRouter    路由根組件,路徑帶#號hash路由
withRouter 對非路由渲染的組件組件進行包裹,讓其具備三個屬性

Route 定義路由
Link 路由跳轉,沒有動態屬性,使用場景,非tabBar
NavLink 路由跳轉,有動態屬性,使用場景,tabBar
Switch 路由渲染,被其包裹的組件只會被渲染一個,包裹時最好將子組件 放在這個標簽之外,父組件放在內部
Redirect 路由重定向
15reatc路由中Route渲染組件的方法有哪幾種?區別是什么?

1)component:使用component渲染的路由組件會有三個自帶的屬性,localtion、history、match,他的缺點是不可以進行傳參,不可以渲染非組件標簽;

2)render:使用render渲染的路由組件可以進行路由傳參,可以渲染非組件標簽,但是不具備三個屬性,如果需要使用的話,需要傳參傳遞進來;

16、如何控制路由的路徑完全匹配?

NavLink或者Route標簽中添加exact屬性,是路徑完全匹配

17react中路由傳遞參數的方法有哪些?

動態路由:

定義路由時:采用/:/:這種形式;

路由跳轉時:路徑+key形式;

接收:this.props.match.params;

query傳值:

定義路由時:與正常時相同;

路由跳轉時:使用字符串拼接;

接收:this.props.location.search

對象傳值:

定義路由時:與正常時相同;

路由跳轉時:使用對象,內部包含定義路徑的對象和傳遞參數的對象;

接收:this.props.history.query

編程式導航:

this.props.history.push({路徑部分},{參數部分})

注意:使用對象傳值以及編程式導航傳值時如果頁面刷新,那么傳遞的值就會消失;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM