React-Native 平面列表的性能问题



我正在使用React-Native平面列表,我遇到的问题是渲染问题。假设我们必须在平面列表中添加 2000 个项目。

ScrollToIndex(1000) 没有得到结果,因为它不在视口中。

有什么解决方案可以得到结果吗?

最好使用 getItemLayout prop 以获得更好的性能。

getItemLayout 是一个给定两个参数的函数:

data,即列表上显示的数据(它与您传递到列表中的数据道具相同)和索引,即相关行的行的索引。

它应该返回一个包含三个 props 的对象:偏移量,索引索引处从第一行顶部到行顶部的距离;长度,这是行和索引的高度,它只是传递给函数的索引参数。

对于 FlatList,这个函数编写起来相对简单。如果所有行的高度相同,则可以简单地返回 {offset: ROW_HEIGHT * index, length: ROW_HEIGHT, index}。如果它们不是,或者您的行之间有分隔符,它会稍微复杂一些,但您应该返回的内容仍然很明显。

您可以在此处了解更多信息:

https://medium.com/@jsoendermann/sectionlist-and-getitemlayout-2293b0b916fb

https://facebook.github.io/react-native/docs/performance.html#listview-initial-rendering-is-too-slow-or-scroll-performance-is-bad-for-large-lists

getItemLayout = (data, index) => {
return { length: 200, offset: 200 * index, index };
}

这是一个函数,你可以用作FlatList的getItemLayout道具。 在这个函数中,你对FlatList说你的行高必须是200。 它对性能有好处,因为它不需要计算行的高度。

我已经将scrollToIndex用于一个月中的天数的平面列表,需要在页面渲染时自动滚动到当天。更不用说您的 1000 个项目了,即使是 28 月份的 28 个(天)也无法为我加载。

您可以确保在 FlatList 上设置了 onScrollToIndexFailed,以便它可以使用 scrollToEnd 反复运行 scrollToIndex 函数,直到成功(当列表呈现时)。

另一种方法是使用要滚动到的项目筛选列表,或者减少列表中的项目以减少渲染,除非您确实需要使滚动动画超过 1000 个项目。

相关内容

  • 没有找到相关文章

最新更新