2015-03-25 55 views
0

到目前爲止,我很喜歡React,但是我的應用程序中有一部分(不幸是重要的一部分),我打了一下呃。在shouldComponentUpdate之後,但在下一個組件的ShouldComponentUpdate被調用之前,是否有可能更新組件?

當一個項目掛載或刷新dom的更新時,我需要在繼續之前對最終化的HTML執行特定檢查(例如,如果組件的dom節點溢出容器,我需要將其移動到下一個容器)。

與此問題是shouldComponentUpdate被稱爲所有他們之前有任何人componentDidUpdate。這意味着我必須等到所有組件刷新到dom,然後再遍歷它們才能從上到下計算它們是否溢出了它們的外部容器,如果是這樣,我需要更改一些東西,導致所有組件在那個人被迫更新。

例如,如果我的父項有20個組件並且第三個組件溢出,我必須等到20個組件全部刷新到dom之後再將後面的17個組件移動到下一個容器,然後重複,直到所有組件滿足要求在他們的容器內。

我希望發生的第一個組件沖洗,我檢查它是否溢出,然後第二個組件沖刷,然後我檢查它是否溢出,等等......這將大大減少多少衝洗到DOM。

這是所有可能的反應嗎?

如果你在好奇,爲什麼這背後的問題,你可以看到this question

回答

1

不,這不可能直接導致反應順序組件DOM刷新之間的呼叫shouldComponentUpdate。實際上,這可能會大大地影響新React代碼通常通過刷新每次調用之間的所有DOM更改而實現的性能提升。

相反,我相信你需要移動到一個模型中,一個容器組件迭代地在子屏幕上或屏幕上呈現子組件,然後適當地設置子組件。父組件需要使用回調componentDidUpdate來測量孩子渲染後的情況。然後,例如使用setState,觸發添加新的子項,直到循環完成。最終,所有的孩子都會被渲染。這種技術應該運行得相對較快,並儘可能地隔離DOM和測量組件(而不是影響整個頁面)。如果您可以將孩子渲染到屏幕外的組件/ DOM元素進行測量,則可能會稍微快一點。事實上,如果您可以讓所有孩子在一次通過屏幕上進行測量,這可能是理想的。

相關問題