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

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

2.1 ScrollView

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

优点:

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

缺点:

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

常用属性:

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

示例:

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;

水平滚动示例:

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 的阈值。

示例:

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:定义列表底部组件。

示例:

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.xdnf.cn/news/13829.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

认知战认知作战:郑成功收复台湾的认知作战分析与策略

认知战认知作战&#xff1a;郑成功收复台湾的认知作战分析与策略 认知战认知作战&#xff1a;郑成功收复台湾的认知作战分析与策略 关键词&#xff1a;认知作战,新质生产力,人类命运共同体,认知战,认知域,认知战研究中心,认知战争,认知战战术,认知战战略,认知域作战研究,认知…

单细胞技术加持,扩增子测序重回高大上| 一区微生物多组学研究新思路!

俗称“万金油”的扩增子技术已经再难发出好文章了&#xff1f;实则不然!关联高端霸气上档次的单细胞转录组技术&#xff0c;扩增子研究依旧可以焕发新生机&#xff0c;重回高大上。 近日&#xff0c;檀国大学在《communications biology》上最新发表的文章打破了传统微生物组分…

遗传算法与深度学习实战(23)——利用遗传算法优化深度学习模型

遗传算法与深度学习实战&#xff08;23&#xff09;——利用遗传算法优化深度学习模型 0. 前言1. 神经进化2. 使用遗传算法作为深度学习优化器小结系列链接 0. 前言 神经进化涵盖了所有用于改进深度学习的进化算法。更具体地说&#xff0c;神经进化用来定义应用于深度学习的特…

Hbase入门

目录 Hbase逻辑结构 一、基础知识 1. Hbase逻辑结构 行键(Rowkey)&#xff1a;唯一标识一行数据&#xff0c;按照字典序(row_key1 < row_key11 < rowkey2)排列.列Col&#xff1a;数据记录的一条属性列族&#xff1a;将多列划分为一类&#xff0c;视为一个列族。例如上图…

三维模型-管道-建模规范

一、阀门模型处理 Max中的阀门模型,备份之前可拆分的阀门模型。 将需要选择的阀门,合并(不打组)成一个模型。 材质在不同模型上,按照需求分好不同的材质 例如:阀门、管道,需要分成不同的材质和相对应的不同模型。 二、管道模型处理 1) 普通管道 默认展开UV ;2) 流…

golang go语言 组建微服务架构详解 - 代码基于开源框架grpc+nacos服务管理配置平台

整体介绍&#xff1a; 本文主要介绍如何用go语言 来组建微服务的框架&#xff0c;grpc服务管理 示例框架 代码由grpcnacos go sdk 组成。 grpc负责将调用序列化并传递到远端&#xff0c;nacos负责服务发现和服务管理。 grpc和nacos都是开源产品。代码复制下来就能跑。 微服…

open3d

open3d open3d用于 3D 数据处理的现代库。 简介 Open3D 是一个开源库&#xff0c;支持快速开发处理 3D 数据的软件。Open3D 前端公开了一组精心挑选的 C 和 Python 数据结构和算法。后端经过高度优化&#xff0c;并设置为并行化。Open3D 是从零开始开发的&#xff0c;具有一更…

一个轻量级RAG文本切块项目Chonkie

**Chonkie&#xff1a;**实用的RAG分块库&#xff0c;轻量级、速度快&#xff0c;可随时对文本进行分块 支持的方法 Chonkie 提供了多个分块器&#xff0c;可高效地为RAG应用程序拆分文本。以下是可用分块器的简要概述&#xff1a; TokenChunker&#xff1a;将文本分割成固定大…

如何通过AB测试找到最适合的Yandex广告内容

想要在Yandex上找到最能吸引目标受众的广告内容&#xff0c;A/B测试是一个不可或缺的步骤。通过对比不同版本的广告&#xff0c;我们可以发现哪些元素最能引起用户的共鸣。首先&#xff0c;设计两个或多个广告版本&#xff0c;确保每个版本在标题、文案、图片等关键元素上有所不…

车载空气净化器语音芯片方案

开发背景&#xff1a; 随着人们生活质量的不断提升和环保意识的日益增强&#xff0c;车内空气质量成为了广大车主关注的焦点。长时间封闭的车厢环境&#xff0c;加之城市空气污染、新车内饰材料释放的有害气体等因素&#xff0c;使得车内空气质量往往不尽如人意&#xff0c;严重…

JUC-locks锁

JUC-locks锁 1、JUC-locks锁概述2、管程模型3、ReentrantLock可重入锁3.1 ReentrantLock源码3.2 Sync静态内部类3.3 NonfairSync非公平锁3.4 FairSync公平锁 如有侵权&#xff0c;请联系&#xff5e; 如有错误&#xff0c;也欢迎批评指正&#xff5e; 1、JUC-locks锁概述 java…

如何将交叉编译配置在环境变量中

-- 将交叉编译配置到环境变量中&#xff0c;就可以直接用了 -- 环境变量 PATH -- 修改 Linux 的环境变量需要哪个文件 针对本用户修改&#xff1a; ~/.bashrc针对所有用户修改&#xff1a; /etc/profile -- 这里针对所有用户修改 sudo gedit /etc/profile-- 注意这个文件…

LeetCode-222.完全二叉树的节点个数

. - 力扣&#xff08;LeetCode&#xff09; 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一…

Jmeter中的配置原件(五)

17--登录配置原件/素 用途 管理登录信息&#xff1a;为测试计划中的多个请求提供统一的登录信息。简化配置&#xff1a;避免在每个请求中重复配置用户名和密码。支持多种认证方式&#xff1a;支持Basic、Digest等认证方式。 配置步骤 添加登录配置元件 右键点击线程组&#…

深度解析 ArrayList:揭开源码背后的设计与实现原理

一、ArrayList 简介 ArrayList 的底层是数组队列&#xff0c;相当于动态数组。与 Java 中的数组相比&#xff0c;它的容量能动态增长。在添加大量元素前&#xff0c;应用程序可以使用ensureCapacity操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。 ArrayLi…

网络安全应该学什么?别被培训机构这些内容给骗了!

了解过的朋友都知道&#xff0c;网络安全内容十分丰富&#xff0c;大大小小的知识点都包含。所以有的朋友就都想学&#xff0c;尤其一些培训机构的课程大纲介绍的特别详细&#xff0c;又包含这又包含那&#xff0c;但是这些内容真的都实用吗&#xff1f;如果想系统学习&#xf…

吴恩达LLM Agent工作流Prompt设计精解

在详解和实测吴恩达4种Agentic 工作流之中&#xff0c;我测试了各种框架诸如反思、工具调用、规划、多智能体&#xff0c;在学习了其中各种Prompt设计后&#xff0c;有了一些新的认识。 对于特定的任务来说&#xff0c;没有万能的Prompt&#xff0c;只有一些通用的模式&#xf…

除了 Mock.js,前端还有更方便的 Mock 数据工具吗?

在前端开发中&#xff0c;模拟数据&#xff08;Mock Data&#xff09;是不可或缺的一部分&#xff0c;它能够帮助开发者在后端接口未完成前进行界面和逻辑的测试。而 Mock.js 是一个广泛使用的库&#xff0c;它通过简洁的语法和强大的功能&#xff0c;让前端开发者可以轻松地创…

【原创】java+ssm+mysql高校学籍管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

pytorch深度学习环境安装 + 讲解【新手版】

不知道有没有学深度学习的小伙伴在安装深度学习环境时候很头疼&#xff0c;反正我在研一时候是很头疼很头疼的一件事&#xff0c;根本搞不清楚什么显卡、显卡驱动、pytorch版本、cuda、cudnn等等等&#xff0c;这些是不是非常的头疼。 好&#xff0c;你们的救星来了。我&#x…