1阅羹、react生命周期及相關(guān)用法
react的生命周期分為初始化階段为居、運(yùn)行階段、銷毀階段。
(1)初始化階段
componentWillMount :實(shí)例掛載之前
Render : 渲染組件
componentDidMount : 實(shí)例掛載完成 可以與后臺(tái)進(jìn)行初始化數(shù)據(jù)交互
(2)運(yùn)行階段
componentWillReceiveProps : 父組件改變時(shí)調(diào)用
sholudComponentUpdate:主要是用來手動(dòng)阻止組件渲染籍滴,一般在這個(gè)函數(shù)中做組件的性能優(yōu)化
componentWillUpdate:組件數(shù)據(jù)更新前調(diào)用
componentDidUpdate: 組件數(shù)據(jù)更新完成時(shí)調(diào)用
(3)銷毀階段
componentUnmount:銷毀階段酪夷,一般用來銷毀不用的變量或者是解除無用定時(shí)
器以及解綁無用事件,防止內(nèi)存泄漏問題
2异逐、運(yùn)行階段生命周期的調(diào)用順序
componentWillReceiveProps --> shouldComponentUpdate --> componentWillmount --> componentDidUpdate
3捶索、react中keys的作用
keys是react中用于追蹤哪些列表元素被修改,刪除或者被添加的輔助標(biāo)識(shí)灰瞻,
在diff算法中 keys用來判斷該元素節(jié)點(diǎn)是被移動(dòng)過來的還是新創(chuàng)建的元素,減少不必要的重復(fù)渲染
4辅甥、setState第二個(gè)參數(shù)的作用
因?yàn)閟etState是一個(gè)異步的過程酝润,所以說執(zhí)行完setState之后不能立即更改state里面
的值,如果需要對(duì)state數(shù)據(jù)更改監(jiān)聽璃弄,setState提供第二個(gè)參數(shù)要销,就是用來監(jiān)聽state
里面數(shù)據(jù)的更改,當(dāng)數(shù)據(jù)更改完成夏块,調(diào)用回調(diào)函數(shù)
5疏咐、vue和react的區(qū)別
1、react嚴(yán)格上針對(duì)的是mvc模式的view層脐供,vue則是mvvm模式
2浑塞、操作dom的方式不同,vue使用的是指令操作dom政己、react是通過js進(jìn)行操作
3 酌壕、數(shù)據(jù)綁定不同,vue實(shí)現(xiàn)是的雙向綁定歇由,react的數(shù)據(jù)流動(dòng)是單向的
4卵牍、react中state是不能直接改變的,需要使用setStata改變沦泌,
vue中的state不是必須的糊昙,數(shù)據(jù)主要是有data屬性在vue對(duì)象中管理的
6、react中的高階函數(shù)
高階函數(shù)就是一個(gè)純js且沒有副作用的函數(shù)
高階組件就是一個(gè)函數(shù)谢谦,且該函數(shù)接受一個(gè)組件昨?yàn)閰?shù)释牺,并返回一個(gè)新的組件
相關(guān)資料:https://blog.csdn.net/baidu_38151187/article/details/79884613
7、react生命周期中他宛,最適合于服務(wù)端進(jìn)行數(shù)據(jù)交互的是哪個(gè)函數(shù)
componentDidMount:在這個(gè)階段船侧,實(shí)例和dom都已經(jīng)掛載完成,可以進(jìn)行相關(guān)的dom操作
8厅各、react性能優(yōu)化階段函數(shù)是哪一個(gè)镜撩?
shouldComponentUpdate
9、react性能優(yōu)化的方案
1、重寫shouldComponetUpdate來避免不必要的dom操作
2袁梗、使用production 版本的react.js
3宜鸯、使用key來幫助React識(shí)別列表中所有子組件的最小變化
10、react中的組件傳值
父?jìng)髯樱ńM件嵌套淺):父組件定義一個(gè)屬性遮怜,子組件通過this.props接收
子傳父:父組件定義一個(gè)屬性淋袖,并將一個(gè)回調(diào)函數(shù)賦值給定義的屬性,
然后子組件進(jìn)行調(diào)用傳過來的參數(shù)锯梁,并將參數(shù)傳進(jìn)去即碗,在父組件的回調(diào)函數(shù)中,即可 獲得子組件傳過來的值
11陌凳、Es6中箭頭函數(shù)與普通函數(shù)的區(qū)別
1剥懒、普通function 的大亨們?cè)谧兞刻嵘惺亲罡叩模^函數(shù)沒有函數(shù)提升
2合敦、箭頭函數(shù)沒有this arguments
3初橘、箭頭函數(shù)不能作為構(gòu)造函數(shù),不能被new 沒有property
4充岛、call和apply方法只有參數(shù)保檐,沒有作用域
12、什么是閉包崔梗?閉包有什么危害夜只?如何解決閉包帶來的危害?
簡(jiǎn)單來說炒俱,閉包就是一個(gè)定義在函數(shù)內(nèi)部的函數(shù)盐肃,因?yàn)閖s中存在作用域的問題,
所以在函數(shù)內(nèi)部定義的變量在函數(shù)外部是沒有辦法直接獲取到的权悟,
而閉包就是溝通函數(shù)內(nèi)部和外部的橋梁砸王,這樣在函數(shù)外部可以得到函數(shù)內(nèi)部的值,
并且閉包可以實(shí)現(xiàn)函數(shù)屬性和方法的私有化
閉包的危害
因?yàn)殚]包會(huì)將內(nèi)部變量?jī)?chǔ)存在內(nèi)存中峦阁,如果長(zhǎng)時(shí)間不清除的話會(huì)造成內(nèi)存泄漏谦铃,影響程序的性能
解決方法: 對(duì)于不使用的變量及時(shí)清除