react中某個元件的狀態變了,但是內部的乙個子元件並沒有變化,那麼這個子元件會重新渲染嗎?

時間 2021-05-08 03:41:42

1樓:高山景行

乙個元件執行setState之後,從這個元件為根的元件樹會有乙個更新的過程,每個元件都會根據自己的shouldComponentUpdate的結果執行render方法,然後和上次render的結果比較,找到最小差集之後patch到真實dom上。

所以,如果子元件的shouldComponentUpdate沒有返回false的話,它的render是會執行的,但不一定會導致真實dom改變和重新渲染。

2樓:高靖淞

所有的 props 和 state 的變化都會重新 render,但是會進行一次 DOM diff 決定是否更新 DOM。當然父元件的更新就會更新子元件,需要配合 shouldComponentUpdate 做進一步的優化

3樓:程墨Morgan

「重新渲染」和「更新過程」是有區別的,只要明白這兩個規則就好了。

1. 乙個元件如果重新渲染,那麼它的子元件也會開始更新過程;

2. 任何乙個元件的shouldComponentUpdate函式如果返回false,那更新過程就中止了;

假如題主說的「某個元件」為X,它的子元件為Y,當X的狀態改變時,其實連X也未必會重新渲染,要看X的shouldComponentUpdate如何實現,如果返回false,X就不會被重新渲染了,Y當然更不會。

現在假設shouldComponentUpdate沒有從中作梗,X開始了正常重新渲染,那麼作為子元件的Y肯定會開始更新過程,不過,如果Y的shouldComponentUpdate返回false的話,那Y的更新過程也會被中止,不會重新渲染。

所以,關鍵要看元件的shouldComponentUpdate如何實現。

4樓:camsong 會影

會重新 render,沒變化就不會重新渲染 DOM。

如果使用了 pure render,不會 render 也不會渲染 DOM。

在react中,當乙個元件依賴另乙個元件的寬度或者高度,來設定它的寬度 左右偏移量,該或者做?

張振衣 我之前的解決方案是寫乙個 Ruler 類,它在使用者不能意識到的地方進行渲染 可以是 visibility hidden,或者 z index,或者放在螢幕外 然後把 width 寫到 redux 裡面。第二個點在於,這個過程必須經過真實渲染,是無法避開的。至於那個不需要的切換效果,是可以避...

react 元件數比較深的時候,子元件怎麼向父元件傳指

隋堤倦客 eventbus 當然寫的時候一時爽,之後就比較蛋疼 試試context,其實挺好用的 要是工程有很複雜的預期還是用redux吧,redux真的很清晰很好用,除了寫起來麻煩點 yoom 說個不同的方案吧,我更傾向於發布訂閱的方式,使用了Rxjs。這樣子就跟框架無關了,無論React或Vue...

React 有哪些優秀實用的元件?

秘雨軒 介紹下自己寫 React UWP吧,實現微軟 UWP Design 和 Fluent Design 的 React 開源UI庫。這是官方文件 UWP and Fluent Design UI Libray by React 長這樣的. ProfLiu github上面有乙個開源專案,羅列了很...