如何调试 React-Virtualized 的 InfiniteScroll/Grid 抓取?

How Can I Debug React-Virtualized's InfiniteScroll/Grid Fetching?

我有一个 React Virtualized InfiniteList/Grid 组合,遵循文档中的基本模式 (https://github.com/bvaughn/react-virtualized/blob/master/docs/InfiniteLoader.md#infiniteloader-and-grid)。

效果很好,除了两点:

我已经尽我所能弄清楚发生了什么,即使我用 console.logdebugger 语句填充 React Virtualized 代码,我仍然无法弄清楚为什么会这样在 125 个结果处停止(或者为什么快速滚动重置)。

任何更熟悉 React Virtualized 的人都可以指出代码中它决定是继续获取​​还是停止(并可能将起始索引重置为 0)的位置?我可以看出涉及 InfiniteScroll 的 onRowsRenderedscanForUnloadedRanges 以及 Grid 的 onSectionRendered,但我仍然无法弄清楚值处理在哪里停止以及实际的 "decide whether to keep going" 逻辑开始.

正如@brianvaughn 在他的评论中所建议的那样,InfinititeLoader 组件 (https://github.com/bvaughn/react-virtualized/blob/master/source/InfiniteLoader/InfiniteLoader.js) 负有部分责任。每当呈现行时,从 scanForUnloadedRanges 调用 _loadUnloadedRanges 方法,它会处理加载 scanForUnloadedRanges 找到的范围。

然而,这只是等式的一部分。传递给 onRowsRendered 的参数来自 GridGrid _updateScrollTopForScrollToRow 方法在用户滚动时被调用,该方法具有以下行:

const targetIndex = Math.max(0, Math.min(rowCount - 1, scrollToRow))

targetIndex 最终会影响加载的行,如您所见,它取决于最初传入的 rowCount

这就是我遇到问题的原因。我从 InfiniteLoader + List 组合开始,在该设置中 "row" 对两个组件意味着相同的事情。然而,我随后切换到 InfiniteLoader + Grid 组合,并且切换到 Grid 一个 "row" 是一个 InfiniteLoader 行的数组。换句话说,Grid "row" 是一行单元格,而 InfiniteLoader "row" 是一个单元格。

我计算 rowCount 的方法已更改为使用 "row" 的 Grid 定义,但由于它被传递给 InfinniteLoader 我应该使用InfiniteLoader 对 "row" 的定义。换句话说,我应该只返回 numItems,而不是 numItems/columnCount

如果 React Virtualized 使用 InfiniteLoader 的 "items" 道具而不是使用其他两个 React Virtualized 组件也使用的名称(具有两种不同的含义),那么所有这一切都可以轻松避免...但至少现在我对这些组件的工作原理有了 很多 的更好理解。