我正在做一个 React/Redux 项目,需要实现一个虚拟化/无限加载列表。react-virtualized
似乎打算完成这项工作,但即使在阅读了所有可用文档并阅读了许多 StackOverflow 帖子之后,我仍无法使其工作或找到有关组件实际工作原理的清晰解释。
我看过的主要例子是:
https://github.com/bvaughn/react-virtualized/blob/master/docs/creatingAnInfiniteLoadingList.md https://github.com/bvaughn/react-virtualized/blob/master/docs/creatingAnInfiniteLoadingList.md
https://github.com/bvaughn/react-virtualized/blob/master/docs/InfiniteLoader.md#examples https://github.com/bvaughn/react-virtualized/blob/master/docs/InfiniteLoader.md#examples
我遇到的主要问题是:
目前还不清楚加载程序是如何触发调用的loadMoreRows()
在初始加载/渲染情况下。典型的场景是我们设计组件通过调用数据来初始化自身loadMoreRows()
当它最初渲染时。实现这一点所需的配置值并不明显。
目前尚不清楚是否rowCount
属性旨在代表当前状态loadedrows(数据块/页中的行数),或完整行数据集的总数。而且,无论哪种情况,在进行初始 AJAX 加载调用之前都无法知道这些,那么设置初始值的目的是什么?rowCount
?
我尝试将各种示例中的代码放入我的项目中,但我从未看到过loadMoreRows
正在拨打电话。我认为需要的是一个充实的示例,它演示了一个非常典型的用例:a)最初渲染一个空列表,然后触发初始数据加载调用; b) 更新rowCount
财产,以及何时/何地这样做; c) 管理表示当前数据块/页的当前加载的数据集。
任何指示将不胜感激。
loadMoreRows
作为道具传递给InfiniteLoader
(您可以在示例中看到这一点)。它并不意味着手动调用,而是由内部使用InfiniteLoader
and List
,向下滚动时自动调用。
rowCount
可以同时具有这两种行为。您的 API 可以在不获取全部项目的情况下判断有多少项目,或者不能。rowCount
简单地告诉List
有多少行。
举例来说,假设我们有 100 个商店,我们的第一次提取给了我们前 10 个。同样的响应应该说明是否还有更多商店需要提取。另一次获取可以告诉我们总共有 100 家商店。
有了这个,我们可以使用 100 的总数作为rowCount
(通过查询店铺总数,不获取全部)OR我们可以使用 10 + 1 作为rowCount
,正如第一次获取告诉我们还有更多商店需要加载。
这意味着什么?
如果我们加载了前 10 个商店,并使用rowCount = 100
, InfiniteLoader
将显示 100 行,但只有前 10 行有任何内容,其余行显示“正在加载”行占位符组件。当您向下滚动时会出现“尚未加载”行,InfiniteLoader
会调用loadMoreRows
函数可以加载更多行。
另一方面,如果我们使用rowCount = 10 + 1
, InfiniteLoader
将仅显示 11 行,其中只有最后一行是“正在加载”行占位符组件。什么时候loadMoreRows
叫做,rowCount
将会items.length + 1 === 20 + 1
.
加起来
loadMoreRows
并不意味着要手动调用。它被自动调用InfiniteLoader
当一行isn't已加载正在显示在视口中。所以最初rowCount
可能只是1
,不会加载任何行,并且loadMoreRows
会被称为。
rowCount
可能是currentItems.length + (moreToBeLoaded ? 1 : 0)
or totalItems
。区别在于向用户显示的内容,或者“哎呀,已加载内容结束,请稍等片刻" or "看,这些是所有的项目,但还没有加载,请等待一些加载"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)