React Native入门(六)之列表组件的使用(1)

news/2024/11/7 20:41:37/

前言

这篇文章来了解一下相关列表组件的使用,这些组件在展示数据的时候比较有用!在Android中有ScrollView,ListView等!那么对应的RN中也有类似的组件!

ScrollView

没错,在RN中也有ScrollView这个滚动视图组件,跟Android中的ScrollView一样,功能一样,用法呢也一样!
具体就是这样:

<ScrollView><Text style={{fontSize: 20}}>我是可以滚动的!</Text><Text style={{fontSize: 20}}>我是可以滚动的!</Text><Text style={{fontSize: 20}}>我是可以滚动的!</Text><Text style={{fontSize: 20}}>我是可以滚动的!</Text><Text style={{fontSize: 20}}>我是可以滚动的!</Text><Text style={{fontSize: 20}}>我是可以滚动的!</Text><Text style={{fontSize: 20}}>我是可以滚动的!</Text><Text style={{fontSize: 20}}>我是可以滚动的!</Text><Text style={{fontSize: 20}}>我是可以滚动的!</Text>...        
</ScrollView>

当然里边的组件可以是文本<Text>,也可以是其他的比如图片<Image>等!
<ScrollView>的用法非常简单,这里就不多说了!

长列表

对比Android中的ListView,RN中也有ListView这个组件,但是现在已经废弃!不再推荐使用了!需要了解的可以查看官方文档,这里就不再介绍了!

在RN v0.43出现版本两个新的列表组件取代了ListView,那就是FlatListSectionList,适用于展示长列表数据的组件。

FlatList

这个呢跟ListView基本上一毛一样,适于展示长列表数据,且元素个数可以增删。和ScrollView不同的是,FlatList并不立即渲染所有元素,而是优先渲染屏幕上可见的元素
它有两个比较重要的属性:

  • data:列表的数据源
  • renderItem:从数据源中逐个解析数据,然后返回一个设定好格式的组件来渲染

我们还是来对比ListView,data呢就不用说了吧,数据源,JS中就是一个Array数组,java中可以是数组,也可以是一个List。
renderItem,我的理解呢就相当于Android中的setAdapter()方法,我们拿一个适配器将数据设置在子item的布局中!
这样是不是很好理解了!
没有学过Android的同学,可以忽略setAdapter()方法,renderItem就是依次将数据源中的数据设置在子item的组件上面!这样依次就展示出了一个列表来!
举个例子:

class FlatListTest extends Component {render() {return (<View style={flatListStyles.container}><FlatListdata={[{key: '大护法'},{key: '绣春刀II:修罗战场'},{key: '神偷奶爸3'},{key: '神奇女侠'},{key: '摔跤吧,爸爸'},{key: '悟空传'},{key: '闪光少女'},]}renderItem={({item}) => <Text style={flatListStyles.item}>{item.key}</Text>}/></View>);}
}
;const flatListStyles = StyleSheet.create({container: {flex: 1,paddingTop: 22},item: {padding: 10,fontSize: 18,height: 44,},
})AppRegistry.registerComponent('AwesomeProject', () => FlatListTest);

这里写图片描述
需要注意的点:
data接收的数组,需要写成{key:你的数据value}的形式,否则会有黄色的警告!
renderItem绑定数据的时候:renderItem={({item}) => 你的子item的组件},获取数据调用item.key

SectionList

SectionList就相当于分组带标题的FlatList,我们可以为具有同样特征的一类数据添加一个分组标题,最常见的比如,我们的联系人,按照拼音字母分组。

对于SectionList的简单使用呢,需要了解下边3个属性:

  • sections:这个属性同样接收的是一个数组,类似{title: 'L', data: [{key: '李四'}]},里边的title,表示分组标题的名字data,表示这个分组下的数据源data下的内容跟上边讲FlatList中设置data相同!
  • renderItem :这个属性也是绑定数据到子item组件上的,跟FlatList中renderItem相同。
  • renderSectionHeader:对比renderItem,这个属性是设置分组标题的,具体使用和renderItem类似!
    使用:renderSectionHeader={({section}) => 你要展示标题的组件},获取标题的内容要调用:section.title

看一个例子:

class SectionListTest extends Component {render() {return (<View style={styles.container}><SectionListsections={[{title: 'L', data: [{key: '李四'}]},{title: 'W', data: [{key: '王五'}]},{title: 'Z', data: [{key: '赵六'},{key: '张三'}]},]}renderItem={({item}) => <Text style={styles.item}>{item.key}</Text>}renderSectionHeader={({section}) => <Text style={styles.sectionHeader}>{section.title}</Text>}/></View>);}
}
;const styles = StyleSheet.create({container: {flex: 1,paddingTop: 22},sectionHeader: {paddingTop: 2,paddingLeft: 10,paddingRight: 10,paddingBottom: 2,fontSize: 14,fontWeight: 'bold',backgroundColor: 'skyblue',},item: {padding: 10,fontSize: 18,height: 44,},
})AppRegistry.registerComponent('AwesomeProject', () => SectionListTest);

这里写图片描述

另外一个需要注意的点:
在上边我们的例子中,不同的section使用渲染的都是同一个子组件,这里是<Text style={styles.item}>{item.key}</Text>,那么如果想要不同的section使用不同的子组件渲染,该怎么写呢?
这样写:

<SectionListsections={[ // 不同section渲染不同类型的子组件{data: [...], key: ..., renderItem: ...},{data: [...], key: ..., renderItem: ...},{data: [...], key: ..., renderItem: ...},]}
/>

结语

本篇文章介绍了常用列表组件FlatList和SectionList的简单使用,关于列表组件涉及到的内容是比较多的,所以分两篇学习,在下一篇文章将学习为FlatList添加分割线,header,footer,空数据视图,下拉刷新,上拉加载等进阶的内容
好了,下篇见!


http://www.ppmy.cn/news/665821.html

相关文章

一小时入门 Python 3 网络爬虫-转载

一、前言 强烈建议&#xff1a;请在电脑的陪同下&#xff0c;阅读本文。本文以实战为主&#xff0c;阅读过程如稍有不适&#xff0c;还望多加练习。 本文的实战内容有&#xff1a; 网络小说下载&#xff08;静态网站&#xff09; 优美壁纸下载&#xff08;动态网站&#xf…

Python 爬虫---(7) Python3网络爬虫快速入门实战解析

转载请注明作者和出处&#xff1a; http://blog.csdn.net/c406495762 Github代码获取&#xff1a;https://github.com/Jack-Cherish/python-spider Python版本&#xff1a; Python3.x 运行平台&#xff1a; Windows IDE&#xff1a; Sublime text3 PS&#xff1a;本文为Gitchat…

js实现淡入淡出轮播图

1.图片淡入淡出自动轮播. 2.可以用按钮控制轮播. 效果图: 代码如下: htmlscc: *{margin: 0;padding: 0;}html,body{width: 100%;}.container{position: absolute;top: 50%;left: 50%;transform: translate(-50%,-50%);width: 800px;height: 500px;overflow: hidden;}.li…

Python3网络爬虫快速入门实战解析

转自&#xff1a;"https://blog.csdn.net/c406495762/article/details/78123502 Python版本&#xff1a; Python3.x 运行平台&#xff1a; Windows IDE&#xff1a; Sublime text3 文章目录 [toc]更多教程&#xff0c;请查看&#xff1a;https://cuijiahua.com/blog/spi…

JAVA从入门到放弃教程300章

该教程是我于2018年9月中旬在网络上收藏的&#xff0c;若原作者认为有版权冲突&#xff0c;请私我 目录 第1章 - java概述 实例001 输出“hello world”实例002 输出控制台实例003 输出由“*”组成的三角形实例004 输出符号表情 第2章 - eclipse开发工具 实例005 下载并运行e…

python 之 matplotlib

文章目录 1.NumPy Matplotlib1.1 下载所需要的包1.2 pyplot介绍 2.画图2.1 一般包含什么内容2.2 语法(没啥用)2.3 画图流程解释2.4 以折线图为例讲解 流程、基本语法(看这个就够了) 3. 各图示例3.1折线图 .plot()3.1.1 设置x、y轴坐标为字符串坐标轴添加名字图的名字3.1.2 绘制…

新冠知识图谱学习记录

新冠知识图谱构建与问题记录 文章目录 新冠知识图谱构建与问题记录开始前的安装工作问题(1)描述&#xff1a;shell可import&#xff0c;pycharm报no modul问题(2)描述&#xff1a;个别module飘红问题(3)描述&#xff1a;目前学习方向问题(4)描述&#xff1a;valueError问题(5)描…

日报(2019.7.4 -- 12.30)

7.4 使用ftp工具&#xff08;filezilla&#xff09;和ssh工具&#xff08;Xshell&#xff09;项目部署 7.8 10.191.1.2忽略大小写的后端项目配置 7.9 下载电子书和杂志 7.10 下载短视频和宣传片&#xff0c;整理前端的图片&#xff0c;ps测量图片的尺寸 7.11 整理一下上传资源的…