react-virtualized InfiniteLoader / List - 使用AJAX的工作示例

时间:2018-02-02 18:06:27

标签: reactjs react-virtualized

我正在做一个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

我遇到的主要问题是:

  1. 在初始加载/渲染情况下,如何触发加载器来调用react-virtualized非常不清楚。典型情况是,我们设计组件时,通过在最初呈现时调用loadMoreRows()来使用数据初始化自身。实现这一目标所需的配置值并不明显。

  2. 目前尚不清楚loadMoreRows()属性是否用于表示已加载行的当前状态(块/页数据中的行数) ),或整行行数据的总数。并且,在任何一种情况下,在进行初始AJAX加载调用之前都不能知道这些,那么设置rowCount的初始值的意图是什么?

  3. 我已尝试将各种示例中的代码放入我的项目中,但我从未看到rowCount调用正在进行中。我认为需要的是一个充实的例子,它演示了一个非常典型的用例:a)最初渲染一个空List,然后触发一个初始数据加载调用; b)更新loadMoreRows属性,以及何时/何地执行此操作; c)管理代表当前数据块/页面的当前加载的数据集。

    任何指针都会非常感激。

1 个答案:

答案 0 :(得分:7)

loadMoreRows作为道具传递给InfiniteLoader(您可以在示例中看到)。它并不意味着手动调用,它由InfiniteLoaderList在内部使用,并在向下滚动时自动调用。

rowCount可以同时拥有这两种行为。您的API可以告诉您有多少项而不是全部取出它们,或者它不能。 rowCount只是告诉List有多少行。

例如,假设我们有100个商店,我们的第一个提取给我们第一个10.同样的响应应该说是否还有更多的商店要提取。另一个提取可以告诉我们总共有100家商店。 有了这个,我们可以使用总计100作为rowCount(通过查询商店总数,而不是全部提取) OR 我们可以使用10 + 1作为rowCount ,第一次获取告诉我们还有更多的商店要加载。

这是什么意思?

如果我们加载了前10个商店,并使用rowCount = 100InfiniteLoader将显示100行,但只有前10个会有任何内容,其余的显示& #34;装载"行占位符组件。因为那还没有加载'当您向下滚动时会显示行,InfiniteLoader会调用loadMoreRows函数,以便加载更多行。

另一方面,如果我们使用rowCount = 10 + 1InfiniteLoader只会显示11行,只有最后一行是" loading"行占位符组件。当loadMoreRows被调用时,rowCount将为items.length + 1 === 20 + 1

总结

loadMoreRows并不意味着手动调用。如果在视口中显示未加载的行,InfiniteLoader会自动调用它。因此,最初rowCount可能只是1,不会加载任何行,并且会调用loadMoreRows

rowCount可以是currentItems.length + (moreToBeLoaded ? 1 : 0)totalItems。不同之处在于向用户显示的内容," 糟糕,已加载的内容,等待更多"或者" 看,这些是所有项目,但还没有加载,等待一些加载"