【发布时间】:2018-07-13 07:09:18
【问题描述】:
我正在做一个 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/InfiniteLoader.md#examples
我遇到的主要问题是:
目前还不清楚在初始加载/渲染情况下如何触发加载程序来调用
loadMoreRows()。典型的场景是,我们将组件设计为通过在初始渲染时调用loadMoreRows()来使用数据初始化自身。实现这一点所需的配置值并不明显。尚不清楚
rowCount属性是用于表示已加载 行的当前状态(数据块/页中的行数),还是总计数完整的行数据集。而且,无论哪种情况,在进行初始 AJAX 加载调用之前都无法知道这些,那么设置rowCount的初始值的目的是什么?
我尝试将各种示例中的代码放入我的项目中,但我从未看到有人调用过loadMoreRows。我认为需要一个充实的示例来演示一个非常典型的用例 a) 最初呈现一个空列表,然后触发初始数据加载调用; b) 更新rowCount 属性,以及何时/何地执行此操作; c) 管理代表当前数据块/页面的当前加载的数据集。
任何指针将不胜感激。
【问题讨论】:
-
行数应该是数据集中的总行数;这会通知 VirtualizedTable 如何呈现滚动条。
-
一个确切说明什么不起作用的代码示例将帮助人们回答您的问题
-
我建议查看此目录中的
InfiniteLoader.example.js和InfiniteLoader.jest.js文件以获取使用它的示例 github.com/bvaughn/react-virtualized/tree/master/source/… -
@brianvaughn InfiniteLoader.example.js 是我看到的第一个示例,因为它在项目文档中。该示例与基本的 AJAX 数据加载场景不太相关 - 该示例似乎正在跟踪某种加载的RowsMap 中的数据,并且正在使用具有超时和 Promise 的假数据。我无法辨别该示例的各个部分在做什么,或者如何将其转换为更典型的 AJAX 请求场景。例如 - 示例中 Promise 的目的是什么?你怎么知道总共有多少行数据?等等。你能指出一个 AJAX 示例吗?
-
@brianvaughn 我现在正在查看 InfiniteLoader.jest.js,有些部分没有意义。具体来说:在
describe('InfiniteLoader')中,有一个defaultIsRowLoaded()正在测试return !!isRowLoadedMap[index]- 但isRowLoadedMap从未被修改过,也就是说,没有任何东西被设置到其中 - 那么这是如何工作的呢?尚不清楚isRowLoaded测试是否在做任何事情。