React Native(五)实现列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React Native(五)实现列表相关的知识,希望对你有一定的参考价值。

参考技术A 一、ListView已被弃用。新版React Native推荐使用FlatList。
在React Native0.43版本中引入了FlatList,SectionList与VirtualizedList,其中VirtualizedList是FlatList 与 SectionList 的底层实现。

二、关于把 FlatList 或 SectionList 控件放在 ScrollView 中的时候,调试的时候会有如下黄盒警告:
VirtualizedLists should never be nested inside plain ScrollViews with the same orientation

FlatList 和 SectionList 都是用的 Virtualized Lists。Virtualized Lists, 是一种带有性能优化的 List,在 List 很大时Virtualized Lists有明显的内存优化结果。怎么个优化法呢?例如一个 List 有一千个 Cell,如果没有优化,这一千个 Cell 都会被渲染并保持在内存中,内存会明显升高。Virtualized lists 的做法是,只让显示在屏幕上的 Cell 渲染,其它的没有显示在屏幕上的 Cell 销毁。这样就节省很多内存。

原因:那现在你把 Virtualized List 放在 ScrollView 中,ScrollView 是要全部渲染的,那么 Virtualized List 就计算不出来哪些 Cell 目前显示在屏幕上,会渲染所有的 Cell,那么它的优势就显现不出来了。这个时候就会抛出上述警告。

解决方法:把要一起滚动的组件放在 FlatList 的 ListHeaderComponent 或 ListFooterComponent 中。这样就不需要 ScrollView 了。

改之前:
render()
return (
<ScrollView>
<Title>Welcome</Title>
<Text>Take a look at the list of recipes below:</Text>
<FlatList
data=recipes
renderItem=renderItem
/>
<Footer/>
</ScrollView>
);


改之后:
render()
return (
<FlatList
LisHeaderComponent=
<>
<Title>Welcome</Title>
<Text>Take a look at the list of recipes below:</Text>
</>
data=recipes
renderItem=renderItem
ListFooterComponent=
<Footer/>
/>
);

以上是关于React Native(五)实现列表的主要内容,如果未能解决你的问题,请参考以下文章

基于react-native实现的博客园手机客户端

React Native - 水平平面列表内的水平平面列表

React-Native 应用程序的可折叠和可拖动部分列表

使用 react-native init 获取语法错误

react-native-draggable-flatlist 在 ScrollView 中不起作用

React Native之FlatList组件(一)