2017-02-15 158 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