# react面試題-react不可變值如何理解?
在react中有一條鐵律在修改狀態(tài)時(shí)千萬(wàn)不能改變?cè)瓉?lái)的狀態(tài)state,怎么理解這句話呢?比如 在組件狀態(tài)state中定義一個(gè)數(shù)組arr:[1,2,3,4],后面每次點(diǎn)擊一個(gè)按鈕,都給原數(shù)組加個(gè)100,可以用 this.state.arr.concat(100) 這樣不會(huì)改變?cè)瓉?lái)的數(shù)組arr,r如果用push就會(huì)改變?cè)瓉?lái)的值。
## react面試題-react合成事件是什么?
`React` 根據(jù) `W3C` 規(guī)范定義了每個(gè)事件處理函數(shù)的參數(shù),即合成事件。
事件處理程序?qū)鬟f `SyntheticEvent` 的實(shí)例,這是一個(gè)跨瀏覽器原生事件包裝器。它具有與瀏覽器原生事件相同的接口,包括 `stopPropagation()` 和 `preventDefault()` ,在所有瀏覽器中他們工作方式都相同。
`React` 合成的 `SyntheticEvent` 采用了事件池,這樣做可以大大節(jié)省內(nèi)存,而不會(huì)頻繁的創(chuàng)建和銷毀事件對(duì)象。
另外,不管在什么瀏覽器環(huán)境下,瀏覽器會(huì)將該事件類型統(tǒng)一創(chuàng)建為合成事件,從而達(dá)到了瀏覽器兼容的目的。
**合成事件對(duì)象(react event)**
- 所有事件都掛在到document上
- event不是原生的,是syntheticEvent合成事件對(duì)象
- 和vue事件不同和dom事件也不同
react為何要合成事件機(jī)制?
1. 更好的兼容性和跨平臺(tái)
2. 掛在到document,減少內(nèi)存消耗,避免頻繁解綁
3. 方便事件統(tǒng)一管理(如事務(wù)機(jī)制)
# react面試題-在項(xiàng)目中哪些會(huì)命中batchUpdate哪些不會(huì)命中呢?
哪些能命中batchUpdate機(jī)制?
生命周期和他調(diào)用的函數(shù),react注冊(cè)的事件和他調(diào)用的函數(shù),react可以管理的入口 命中的就是異步。
哪些不能命中batchUpdate機(jī)制?
setTimeout setInterval和他調(diào)用的函數(shù),自定義dom事件和他調(diào)用的函數(shù),react管不到的入口 沒(méi)命中就是同步。
更多關(guān)于web培訓(xùn)的問(wèn)題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓(xùn)服務(wù)經(jīng)驗(yàn),采用全程面授高品質(zhì)、高體驗(yàn)培養(yǎng)模式,擁有國(guó)內(nèi)一體化教學(xué)管理及學(xué)員服務(wù),助力更多學(xué)員實(shí)現(xiàn)高薪夢(mèng)想。