我正在做一个React / Redux项目,需要实现虚拟化/无限加载列表。 RewriteEngine on
# First we will check the host header (url)
#if it's www.example.com or example.com
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$ [NC]
# now we will check the https header
# if https is off (Is non-ssl)
RewriteCond %{HTTPS} off
#redirect the request to https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]
似乎打算完成这项工作,但即使在阅读了所有可用的文档并阅读了大量的StackOverflow帖子之后,我也无法使其工作或找到有关其机制的明确解释。组件实际如何工作。
我看过的主要例子是:
https://github.com/bvaughn/react-virtualized/blob/master/docs/creatingAnInfiniteLoadingList.md
https://github.com/bvaughn/react-virtualized/blob/master/docs/InfiniteLoader.md#examples
我遇到的主要问题是:
在初始加载/渲染情况下,如何触发加载器来调用react-virtualized
非常不清楚。典型情况是,我们设计组件时,通过在最初呈现时调用loadMoreRows()
来使用数据初始化自身。实现这一目标所需的配置值并不明显。
目前尚不清楚loadMoreRows()
属性是否用于表示已加载行的当前状态(块/页数据中的行数) ),或整行行数据的总数。并且,在任何一种情况下,在进行初始AJAX加载调用之前都不能知道这些,那么设置rowCount
的初始值的意图是什么?
我已尝试将各种示例中的代码放入我的项目中,但我从未看到rowCount
调用正在进行中。我认为需要的是一个充实的例子,它演示了一个非常典型的用例:a)最初渲染一个空List,然后触发一个初始数据加载调用; b)更新loadMoreRows
属性,以及何时/何地执行此操作; c)管理代表当前数据块/页面的当前加载的数据集。
任何指针都会非常感激。
答案 0 :(得分:7)
loadMoreRows
作为道具传递给InfiniteLoader
(您可以在示例中看到)。它并不意味着手动调用,它由InfiniteLoader
和List
在内部使用,并在向下滚动时自动调用。
rowCount
可以同时拥有这两种行为。您的API可以告诉您有多少项而不是全部取出它们,或者它不能。 rowCount
只是告诉List
有多少行。
例如,假设我们有100个商店,我们的第一个提取给我们第一个10.同样的响应应该说是否还有更多的商店要提取。另一个提取可以告诉我们总共有100家商店。
有了这个,我们可以使用总计100作为rowCount
(通过查询商店总数,而不是全部提取) OR 我们可以使用10 + 1作为rowCount
,第一次获取告诉我们还有更多的商店要加载。
这是什么意思?
如果我们加载了前10个商店,并使用rowCount = 100
,InfiniteLoader
将显示100行,但只有前10个会有任何内容,其余的显示& #34;装载"行占位符组件。因为那还没有加载'当您向下滚动时会显示行,InfiniteLoader
会调用loadMoreRows
函数,以便加载更多行。
另一方面,如果我们使用rowCount = 10 + 1
,InfiniteLoader
只会显示11行,只有最后一行是" loading"行占位符组件。当loadMoreRows
被调用时,rowCount
将为items.length + 1 === 20 + 1
。
总结
loadMoreRows
并不意味着手动调用。如果在视口中显示未加载的行,InfiniteLoader
会自动调用它。因此,最初rowCount
可能只是1
,不会加载任何行,并且会调用loadMoreRows
。
rowCount
可以是currentItems.length + (moreToBeLoaded ? 1 : 0)
或totalItems
。不同之处在于向用户显示的内容," 糟糕,已加载的内容,等待更多"或者" 看,这些是所有项目,但还没有加载,等待一些加载"