2017-02-15 98 views
0

我有一個從React Virtualized的InfiniteLoaderGrid組件構建的無限滾動組件。如果我用我的鼠標滾輪向下滾動(即相當慢),一切都很好。但是,當我單擊組件內的滾動條並將其拖動(移動速度更快)時,我從來沒有將它拖到底部。相反,滾動一定比例的滾動條後,突然跳回頂端。React Virtualized InfiniteLoader/Grid:如何防止滾動重置?

我試着在Grid加入console.log語句,但是它們所展現的是,event.target.scrollTop從一個非常高的數字一個時刻去0下。但我不明白的是,爲什麼event.target.scrollTop突然變成0當我在瀏覽器中完成的所有操作都是向下移動鼠標(同時按住左鍵單擊按鈕)。

有沒有人有任何想法我可以修復,甚至只是調試這個問題?

+1

我們在開發DataGrid產品時碰到了類似的東西 - http://reactdatagrid.com - 對於我們來說至少它是我們代碼中的一些東西的結果 - 在事件處理程序中放置一個條件斷點,只有在scrollTop爲0並查看調用堆棧 - 可能會有所幫助。 –

回答

0

原來是用戶錯誤。

InfiniteLoaderGrid都取一個rowCount道具,但這兩個值是非常不同的值。 InfiniteLoader預計numItemsrowCount,但Grid需要rowCountMath.ceil(numItems/columnCount)。我通過使用InfiniteLoader兩個版本「修復」了一個單獨的問題,但我真正需要做的是爲它們傳遞不同的值。

一旦我明白了這一點,並將兩者設置爲單獨的值,奇怪的滾動重置就消失了。儘管倒了React虛擬化源代碼很長一段時間,但我仍然無法弄清楚在rowCount超過時發生的目標事件是scrollTop0。好吧。

+0

兩者都可以傳遞相同的'rowCount'值。你的'cellRenderer'只需要處理卸載的行(意思是指數超過你本地加載的列表大小)。 – brianvaughn