React Native 全栈开发实战班 - 列表与滚动视图

news/2024/11/14 13:12:02/

在移动应用中,列表和滚动视图是非常常见的 UI 组件。React Native 提供了多种组件来处理列表和滚动需求,包括 ScrollView, FlatList, SectionList 等。本小节将详细介绍这些组件的使用方法、优缺点以及适用场景。

2.1 ScrollView

ScrollView 是一个通用的可滚动容器组件,适用于内容较少或内容数量有限的情况。它可以垂直或水平滚动,并且可以嵌套其他组件。

优点:

  • 简单易用,适合快速实现滚动功能。
  • 支持水平和垂直滚动。
  • 可以嵌套其他组件,实现复杂的布局。

缺点:

  • 不适合长列表,因为 ScrollView 会一次性渲染所有子组件,导致性能问题。

常用属性:

  • contentContainerStyle:定义内容容器的样式。
  • horizontal:是否水平滚动。
  • showsVerticalScrollIndicator:是否显示垂直滚动条。
  • showsHorizontalScrollIndicator:是否显示水平滚动条。
  • onScroll:滚动事件处理函数。

示例:

javascript">import React from 'react';
import { ScrollView, Text, View, StyleSheet } from 'react-native';const ScrollViewExample = () => {return (<ScrollView contentContainerStyle={styles.container}><Text style={styles.text}>内容1</Text><Text style={styles.text}>内容2</Text><Text style={styles.text}>内容3</Text><Text style={styles.text}>内容4</Text><Text style={styles.text}>内容5</Text>{/* 更多内容 */}</ScrollView>);
};const styles = StyleSheet.create({container: {padding: 10,},text: {fontSize: 16,marginVertical: 5,},
});export default ScrollViewExample;

水平滚动示例:

javascript">import React from 'react';
import { ScrollView, Text, View, StyleSheet } from 'react-native';const HorizontalScrollViewExample = () => {return (<ScrollView horizontal contentContainerStyle={styles.container}><View style={styles.item}><Text>Item 1</Text></View><View style={styles.item}><Text>Item 2</Text></View><View style={styles.item}><Text>Item 3</Text></View>{/* 更多内容 */}</ScrollView>);
};const styles = StyleSheet.create({container: {padding: 10,},item: {width: 150,height: 100,backgroundColor: '#f0f0f0',marginRight: 10,justifyContent: 'center',alignItems: 'center',},
});export default HorizontalScrollViewExample;
2.2 FlatList

FlatList 是一个高性能的列表组件,适用于渲染长列表数据。它通过虚拟化技术,只渲染当前可见区域的子组件,从而提高性能。

优点:

  • 高性能,适合长列表。
  • 支持懒加载和虚拟化。
  • 支持分页加载。
  • 支持水平滚动。

缺点:

  • 需要数据源为数组形式。
  • 不支持分组列表。

常用属性:

  • data:列表数据源。
  • renderItem:定义列表项的渲染函数。
  • keyExtractor:定义列表项的唯一键。
  • ListHeaderComponent:定义列表头部组件。
  • ListFooterComponent:定义列表底部组件。
  • onEndReached:列表滚动到末尾时触发的函数,用于分页加载。
  • onEndReachedThreshold:触发 onEndReached 的阈值。

示例:

javascript">import React, { useState, useEffect } from 'react';
import { FlatList, Text, View, StyleSheet, ActivityIndicator } from 'react-native';const FlatListExample = () => {const [data, setData] = useState([]);const [page, setPage] = useState(1);const [loading, setLoading] = useState(false);const fetchData = async () => {setLoading(true);const response = await fetch(`https://example.com/api/items?page=${page}`);const newData = await response.json();setData([...data, ...newData]);setPage(page + 1);setLoading(false);};useEffect(() => {fetchData();}, []);const renderItem = ({ item }) => (<View style={styles.item}><Text>{item.title}</Text></View>);const renderFooter = () => {if (!loading) return null;return (<View style={styles.footer}><ActivityIndicator size="large" /></View>);};return (<FlatListdata={data}renderItem={renderItem}keyExtractor={(item) => item.id}onEndReached={fetchData}onEndReachedThreshold={0.5}ListFooterComponent={renderFooter}/>);
};const styles = StyleSheet.create({item: {padding: 10,borderBottomWidth: 1,borderColor: '#ccc',},footer: {padding: 10,alignItems: 'center',},
});export default FlatListExample;
2.3 SectionList

SectionList 是一个支持分组列表的组件,适用于需要分组显示的数据。

优点:

  • 支持分组列表。
  • 高性能,适合长列表。
  • 支持懒加载和虚拟化。

缺点:

  • 需要数据源为分组数组形式。

常用属性:

  • sections:分组数据源。
  • renderItem:定义列表项的渲染函数。
  • renderSectionHeader:定义分组头部的渲染函数。
  • keyExtractor:定义列表项的唯一键。
  • ListHeaderComponent:定义列表头部组件。
  • ListFooterComponent:定义列表底部组件。

示例:

javascript">import React from 'react';
import { SectionList, Text, View, StyleSheet } from 'react-native';const SectionListExample = () => {const sections = [{ title: 'A', data: ['Apple', 'Apricot', 'Avocado'] },{ title: 'B', data: ['Banana', 'Blueberry', 'Blackberry'] },{ title: 'C', data: ['Cherry', 'Coconut', 'Cranberry'] },// 更多分组];const renderItem = ({ item }) => (<View style={styles.item}><Text>{item}</Text></View>);const renderSectionHeader = ({ section }) => (<View style={styles.sectionHeader}><Text style={styles.sectionTitle}>{section.title}</Text></View>);return (<SectionListsections={sections}renderItem={renderItem}renderSectionHeader={renderSectionHeader}keyExtractor={(item, index) => item + index}/>);
};### 导师答疑
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0fe9d8bca58b4ecbb6921ea6fe47cfab.jpeg)

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

相关文章

如何通过PHP脚本自动推送WordPress文章至百度站长平台

想要提高网站在百度搜索中的曝光度?百度站长平台提供了一个非常方便的API接口,允许网站自动将新发布的内容推送至百度以加快收录。本文将带您一步步实现这一功能,帮助您的WordPress站点实现每日自动推送最新文章的URL至百度站长平台。 1. 前提条件 确保您有一个已安装并运行…

专业130+总400+武汉理工大学855信号与系统考研经验电子信息与通信工程,真题,大纲,参考书。

已经顺利读研一段时间&#xff0c;回顾一下考研还是历历在目。应群里学弟要求&#xff0c;回忆总结一下自己考研经历&#xff0c;希望对大家复习有帮助。总分400&#xff0c;专业课855信号与系统130&#xff08;犯了低级错误&#xff0c;计算出现问题&#xff0c;大家专业好好准…

没有数据库也能用 SQL

手头有些 csv/xls 文件&#xff0c;比如这样的&#xff1a; 这种数据很适合用 SQL 做查询&#xff0c;但可惜 SQL 只能用在数据库&#xff0c;要安装个数据库并把这些文件导入&#xff0c;为这么个目标搞的整个应用系统都臃肿很多&#xff0c;实在是划不来。要是有什么技术能直…

数学建模---利用Matlab快速实现机器学习(上)

文章目录 1.机器学习的引入2.机器学习划分2.1输入输出变量的介绍2.2机器学习的分类 3.模型评估指标4.混淆矩阵的引入4.1反映内容4.3正类和负类 5.ROC和AUC的说明6.K折交叉验证7.过拟合和欠拟合8.Matlab操作8.0数据集分析8.1路径选择8.2导入数据8.3查看工作区8.4分类学习工具箱使…

【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的学生成绩管理系统

开题报告 基于 SpringBoot 实现的学生成绩管理系统的设计与实现&#xff0c;其研究背景深厚且富有现实意义。首先&#xff0c;随着信息技术的迅猛发展&#xff0c;教育领域也在逐渐迈向数字化、智能化。信息化手段不仅能够提高教学效率&#xff0c;还能为教育管理提供强有力的…

动态规划---解决多段图问题

ok 小伙伴们&#xff0c;我现在有点小小的红温&#xff0c;有点毛躁。 怎么解决多段图问题呢&#xff1f;求取最短路径有多种方法可取。 家人们&#xff0c;毫无思绪可言……………………………… 要实现动态规划&#xff0c;条件&#xff1a;子问题重叠度较高&#xff0c;并…

2024中国游戏出海情况

01 哪里出海更花钱&#xff1f; 报告显示&#xff0c;中国手游在全球不同市场的获客成本不同&#xff0c;整体来看北美市场竞争更加激烈&#xff0c;其安卓和iOS获客成本是拉丁美洲的12倍和7倍。 按具体市场划分&#xff0c;获客成本最高的TOP 3为韩国、美国和日本&#xff0c…

【大数据学习 | HBASE高级】storeFile文件的合并

Compaction 操作分成下面两种&#xff1a; Minor Compaction&#xff1a;是选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile&#xff0c;对于删除、过期、多余版本的数据不进行清除。 Major Compaction&#xff1a;是指将所有的StoreFile合并成一个StoreFile&am…