[英]Does React rerender all the components of a FOR loop if the array changes but some of the keys remain the same?
我正在實現無限滾動視頻。 每個組件都有一個唯一的 id im 用作鍵。 每個組件都會非常大,所以我想一次只在 DOM 上保留幾個項目。 For example if i have 5 elements with id A,B,C,D,E and next state is B,C,D,E,F will B,C,D,E be rerendered by React?
謝謝你的幫助!
B,C,D,E 會被 React 重新渲染嗎?
技術上是的,但是為了增強性能,React 使用了虛擬 DOM,當 state 發生變化時,會更新虛擬 DOM,並比較虛擬 DOM 的先前版本和當前版本,最后 React 會向真實 DOM 發送批量更新以更新 UI。 這意味着它將僅渲染已更改為真實 DOM 的元素。
取決於您對重新渲染、重新生成 jsx 或重新創建和替換 DOM 元素的含義。
jsx 在以下情況下重新創建:
[value,setValue]=useState()
中的值或this.state
改變時(當 state 改變時)。value = useContext(someContext)
中的值發生變化時。value = useCustomHook()
中的值發生變化時,但這並不能保證每個鈎子都如此。創建新的 jsx 並不意味着重新創建 DOM 元素,在創建 jsx(虛擬 dom)之后,React 會將其與實際 DOM 進行比較,並且僅在實際 DOM 更改時才更新實際 DOM。 這個比較循環可以通過使用 React.memo、React.useMemo 和重新選擇來記憶 jsx 來優化。
隨着道具在渲染之間改變值,我的意思是對象的引用或基元的值已經改變。 所以propName={{new:'object'}}
和propName={{new:'object'}}
會有所不同。 創建的虛擬 dom (jsx) 可能與 DOM 相同,因此組件不會實際呈現。 但是當您執行類似onClick={new=>'function'}
操作時,虛擬 dom 比較總是會失敗,這就是使用 useCallback 的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.