什么是重置/初始化 InfiniteLoader 的正确方法

Pet*_*ier 6 reactjs react-redux react-virtualized

我试图InfiniteLoaderreact-virtualize库中使用来显示textSearch顶部有一个输入字段的可滚动列表(用于过滤列表条目)。

我使用的代码与InfiniteLoader Sample Code非常接近。该列表工作正常,但我不确定如何InfiniteLoadersearchText更改时重置/初始化并显示(完全)新数据。

流程是这样的:

  1. 该列表是第一次打开并显示来自redux store(工作正常)的数据。
  2. 用户更改textSearch和新数据被提取到store
  3. 在这一点上,InfiniteLoader应该进行初始化(我打过电话resetLoadMoreRowsCacheInfiniteLoader
  4. InfiniteLoader应该loadMoreRows第一次调用like 并使用新数据重新渲染

我已经看到INFINITELOADER DEMO具有相同的行为:通过单击“刷新缓存数据”,在我开始整理列表之前没有任何反应。

所以我的问题是:重置/初始化的正确方法是什么?

bva*_*ghn 5

对于较新版本的 InfiniteLoader

由于已发布此问题,InfiniteLoader因此获得了一个自动重新加载数据的参数。您现在可以使用:

infiniteLoaderRef.resetLoadMoreRowsCache(true);
Run Code Online (Sandbox Code Playgroud)

自动刷新缓存并获取新行。

对于旧版本 InfiniteLoader

InfiniteLoader对渲染的一系列行做出反应。该resetLoadMoreRowsCache方法只是重置缓存数据。它不会自动请求加载一批行。

可以说是应该的。我不知道。如果应用程序状态发生变化以致于需要resetLoadMoreRowsCache调用,那么用户代码自动加载第一批新数据似乎很容易。

无论如何,tl;dr 是你应该能够做到这一点:

infiniteLoaderRef.resetLoadMoreRowsCache(); // Reset the cache

loadMoreRows({ // Manually kick off the first batch
  startIndex: 0,
  stopIndex: 20 // Or whatever
});
Run Code Online (Sandbox Code Playgroud)

如果您认为可以改进,很高兴查看 PR 以更改默认行为。

  • 上面建议的重置缓存的方法已经更新,现在允许自动重新加载,新的方法签名是`resetLoadMoreRowsCache (autoReload: boolean = false)`。这消除了按照本答案中的建议手动启动第一批的需要。 (2认同)