【问题标题】:What's the right way to reset / initialize InfiniteLoader重置/初始化 InfiniteLoader 的正确方法是什么
【发布时间】:2017-10-03 14:47:01
【问题描述】:

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

我使用的代码非常接近InfiniteLoader Sample Code。 该列表运行良好,但我不确定如何在更改 searchText 并(完全)显示新数据时重置/初始化 InfiniteLoader

流程是这样的:

  1. 列表首次打开并显示来自redux store 的数据(工作正常)。
  2. 用户更改textSearch 并将新数据提取到store
  3. 此时,InfiniteLoader 应该被初始化(我尝试在InfiniteLoader 上调用resetLoadMoreRowsCache
  4. InfiniteLoader 应该第一次调用 loadMoreRows 并使用新数据重新渲染

我已经看到 INFINITELOADER DEMO 具有相同的行为:通过单击“刷新缓存数据”,直到我开始浏览列表时才会发生任何事情。

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

【问题讨论】:

    标签: reactjs react-redux react-virtualized


    【解决方案1】:

    对于较新版本的InfiniteLoader

    自从这个问题发布以来,InfiniteLoader 获得了一个自动重新加载数据的参数。您现在可以使用:

    infiniteLoaderRef.resetLoadMoreRowsCache(true);
    

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

    对于旧版本的InfiniteLoader

    InfiniteLoader 对正在呈现的一系列行做出反应。 resetLoadMoreRowsCache method 只是重置缓存的数据。它不会自动请求加载一批行。

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

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

    infiniteLoaderRef.resetLoadMoreRowsCache(); // Reset the cache
    
    loadMoreRows({ // Manually kick off the first batch
      startIndex: 0,
      stopIndex: 20 // Or whatever
    });
    

    如果您认为可以改进默认行为,我们很乐意查看 PR 以更改默认行为。

    【讨论】:

    • 感谢您的澄清(以及这个伟大的图书馆!)。您的建议与对recomputeRowHeights 的调用相结合-List 的方法做到了。再次感谢
    • 上面建议的重置缓存的方法已经更新,现在允许自动重新加载,新的方法签名是resetLoadMoreRowsCache (autoReload: boolean = false)。这消除了按照此答案中的建议手动启动第一批的需要。
    • 嗨,汉斯,我想澄清一下您对其他读者所说的话,因为我误解了。 autoReload 布尔值为 true 将重新加载先前的数据请求,因此如果您看到 40-60,它将重新加载 40-60 而不是 0-60。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多