1. React 中 keys 的作用是什么?
key是React中用于
追蹤
哪些列表中元素被修改
、刪除
或者被添加
的輔助標(biāo)識(shí)
。在diff算法
中,key用來判斷
該元素節(jié)點(diǎn)是被移動(dòng)過來的還是新創(chuàng)建的元素,減少不必要
的元素重復(fù)渲染
。
2. React 中有哪些構(gòu)建組件的方式?
有什么區(qū)別?
- 函數(shù)組件看似只是一個(gè)返回值是DOM結(jié)構(gòu)的函數(shù),其實(shí)它的背后是無狀態(tài)組件的思想。
- 函數(shù)組件中,你無法使用State,也無法使用組件的生命周期方法,這就決定了函數(shù)組件都是展示性組件,接收Props,渲染DOM,而不關(guān)注其他邏輯
- 函數(shù)組件中沒有this
- 函數(shù)組件更容易理解。當(dāng)你看到一個(gè)函數(shù)組件時(shí),你就知道它的功能只是接收屬性,渲染頁面,它不執(zhí)行與UI無關(guān)的邏輯處理,它只是一個(gè)純函數(shù)。而不用在意它返回的DOM結(jié)構(gòu)有多復(fù)雜
3.調(diào)用 setState 之后發(fā)生了什么?
4.react diff 原理
- 把樹形結(jié)構(gòu)按照層級(jí)分解,只比較同級(jí)元素
- 給列表結(jié)構(gòu)的每個(gè)單元添加唯一的 key 屬性,方便比較
- React 只會(huì)匹配相同 class 的 component(這里面的 class 指的是組件的名字)
- 選擇性子樹渲染。開發(fā)人員可以重寫shouldComponentUpdate 提高 diff 的性能
5.為什么建議傳遞給 setState 的參數(shù)是一個(gè) callback 而不是一個(gè)對(duì)象
因?yàn)?code>this.props 和
this.state
的更新可能是異步
的,不能依賴它們的值去計(jì)算下一個(gè) state
6.關(guān)于this綁定?
7.setState第二個(gè)參數(shù)的作用
該函數(shù)會(huì)在setState函數(shù)調(diào)用完成并且組件開始重渲染的時(shí)候被調(diào)用,我們可以用該函數(shù)來監(jiān)聽渲染是否完成
8.(在構(gòu)造函數(shù)中)調(diào)用 super(props) 的目的是什么
在 super() 被調(diào)用之前,子類是不能使用 this 的,在 ES5 中,子類必須在 constructor 中調(diào)用 super()。傳遞 props 給 super() 的原因則是便于(在子類中)能在
constructor
訪問this.props
9.flux的思想和流程?
Flux 的最大特點(diǎn),就是數(shù)據(jù)的"單向流動(dòng)"。
流程:
用戶訪問view
view
發(fā)送用戶的action
dispatcher
接收action
,要求store
進(jìn)行相應(yīng)的更新store
更新后,發(fā)送一個(gè)change
事件view
收到change
事件后,更新頁面。
10. 在 React 當(dāng)中 Element 和 Component 有何區(qū)別?
- createElement 函數(shù)是 JSX 編譯之后使用的創(chuàng)建 React Element的函數(shù)
- cloneElement 則是用于復(fù)制某個(gè)元素并傳入新的 Props
11.createElement 和 cloneElement 有什么區(qū)別