react native学习【6.1】——列表视图

ops/2025/1/18 5:49:36/

react native学习【6.1】——列表视图

      • 官方文档
        • 官方文档链接
        • 具体内容
          • FlatList & SectionList
      • 具体操作
        • 1)移动文件
        • 2)修改_layout.tsx文件
          • 删除导入语句
          • 添加导入语句
          • 修改并添加具体的代码语句
          • 对报错语句进行修改
          • 最终的_layout.tsx文件的代码
        • 3)添加并编写menu.jsx文件
        • 4)编写MenuItems.js
        • 5)创建menu图像文件夹
        • 6)创建调用图像的文件MenuImages.js

官方文档

官方文档链接

https://reactnative.cn/docs/using-a-listview

具体内容
FlatList & SectionList
  1. React Native 提供了几个适用于展示长列表数据的组件,一般而言我们会选用FlatList或是SectionList。

  2. FlatList组件用于显示一个垂直的滚动列表,其中的元素之间结构近似而仅数据不同。

    1. FlatList更适于长列表数据,且元素个数可以增删。和ScrollView不同的是,FlatList并不立即渲染所有元素,而是优先渲染屏幕上可见的元素。
    2. FlatList组件必须的两个属性是datarenderItemdata是列表的数据源,而renderItem则从数据源中逐个解析数据,然后返回一个设定好格式的组件来渲染。
    3. 下面的例子创建了一个简单的FlatList,并预设了一些模拟数据。首先是初始化FlatList所需的data,其中的每一项(行)数据之后都在renderItem中被渲染成了Text组件,最后构成整个FlatList

在这里插入图片描述

  1. 如果要渲染的是一组需要分组的数据,也许还带有分组标签的,那么SectionList将是个不错的选择。

在这里插入图片描述

具体操作

1)移动文件
  1. 将(tabs)中的index.jsx contact.jsx移动到app文件夹下面;
  2. 删除(tabs)和(coffee)文件夹。
2)修改_layout.tsx文件

alt+z 可开启自动换行

  1. 删除导入语句

    import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native';

    import 'react-native-reanimated';

    import { StatusBar } from 'expo-status-bar';(如果有的话)

  2. 添加导入语句

    import { Appearance } from 'react-native';

    import { Colors } from '@/constants/Colors';

  3. 修改并添加具体的代码语句
    const colorScheme = Appearance.getColorScheme(); // 调用Appearance 来提供配色方案 'light' | 'dark'
    const theme = colorScheme === 'dark' ? Colors.dark : Colors.light; // 根据当前的配色方案选择对应的主题颜色
    
  4. 对报错语句进行修改
    // 直接删除掉相应的语句就行,下面是删除之后的代码:
    return (<Stack><Stack.Screen name="(tabs)" options={{ headerShown: false }} />{/* <Stack.Screen name="(coffee)" options={{ headerShown: false }} /> */}{/* 为每一个文件添加一个堆栈 */}{/*   <Stack.Screen name="index" options={{title: "Home", headerShown:false}} /><Stack.Screen name="contact" options={{title: "Contact Us"}} /> */}<Stack.Screen name="+not-found" /></Stack>     );
    

    之后,对Stack添加选项,设置标题headerStyle背景颜色 backgroundColor的时候需要对Colors文件添加代码hearderBackground。

在这里插入图片描述

return (<Stack screenOptions={{headerStyle: {backgroundColor: theme.headerBackground},headerTintColor: theme.text, headerShadowVisible: false,}}><Stack.Screen name="index" options={{ headerShown: false, title: 'Home'}} /><Stack.Screen name="menu" options={{ headerShown: true, title: 'Meanu', headerTitle: 'Coffee Shop  Menu' }} /><Stack.Screen name="contact" options={{ headerShown: true, title: 'Contact', headerTitle: 'Contact Us' }} /><Stack.Screen name="+not-found" options={{headerShown: false}}/></Stack> );

需要注意的是,还没有创建menu相关的文件,可能会报错。

  1. 最终的_layout.tsx文件的代码
    import { useFonts } from 'expo-font';
    import { Stack } from 'expo-router';
    import * as SplashScreen from 'expo-splash-screen';
    import { useEffect } from 'react';
    import { Appearance } from 'react-native';
    import { Colors } from '@/constants/Colors';// Prevent the splash screen from auto-hiding before asset loading is complete.
    SplashScreen.preventAutoHideAsync();export default function RootLayout() {const colorScheme = Appearance.getColorScheme(); // 调用Appearance 来提供配色方案 'light' | 'dark'const theme = colorScheme === 'dark' ? Colors.dark : Colors.light; // 根据当前的配色方案选择对应的主题颜色const [loaded] = useFonts({SpaceMono: require('../assets/fonts/SpaceMono-Regular.ttf'),});useEffect(() => {if (loaded) {SplashScreen.hideAsync();}}, [loaded]);if (!loaded) {return null;}return (<Stack screenOptions={{headerStyle: {backgroundColor: theme.headerBackground},headerTintColor: theme.text, headerShadowVisible: false,}}><Stack.Screen name="index" options={{ headerShown: false, title: 'Home'}} /><Stack.Screen name="menu" options={{ headerShown: true, title: 'Meanu', headerTitle: 'Coffee Shop  Menu' }} /><Stack.Screen name="contact" options={{ headerShown: true, title: 'Contact', headerTitle: 'Contact Us' }} /><Stack.Screen name="+not-found" options={{headerShown: false}}/></Stack> );
    }
    
3)添加并编写menu.jsx文件

在app文件夹下面添加menu.jsx文件(注意,此时的menu.jsx是和index.jsx文件是同等级的)

提到SafeAreaViewhttps://reactnative.cn/docs/safeareaview

import { StyleSheet, Appearance, Platform, SafeAreaView, ScrollView, FlatList, View, Text, Image } from "react-native";
import { Colors } from "@/constants/Colors";export default function MenuScreen(){const colorScheme = Appearance.getColorScheme();const theme = colorScheme === "dark"? Colors.dark : Colors.light;const styles = createStyles(theme, colorScheme);// SafeAreaView在移动设备上使用,ScrollView在web上使用const Container = Platform.OS === 'web' ? ScrollView : SafeAreaView;// 菜单屏幕功能的返回return (// 这里的Container是父容器<Container>  {/* data需要具体的数值,所以在constants文件夹下面创建文件MenuItems.js */}<FlatListdata ={[]}renderItem={({item}) => ()}></FlatList></Container>)
}function createStyles(theme, colorScheme) {return StyleSheet.create({});
}

上述内容存在不完善,提示一个错误。后面会完善

4)编写MenuItems.js

在constants文件夹下面创建文件MenuItems.js 。

在这里插入图片描述

export const MENU_ITEMS = [{"id":1,"title":"Espresso","description": "Strong, concentrated coffee.",},{"id":2,"title":"Latte","description": "Rich, smooth milk with a smooth texture.",},{"id":3,"title":"Cappuccino","description": "A smooth, rich, and creamy coffee with a smooth texture.",},{"id":4,"title":"Americano","description": "A strong, thick coffee with a smooth texture.",},{"id":5,"title":"Mocha","description": "A smooth, rich, and creamy coffee with a smooth texture.",},{"id":6,"title":"Macchiato","description": "A smooth, rich, and creamy coffee with a smooth texture.",},{"id":7,"title":"affogato","description": "A smooth, rich, and creamy coffee with a smooth texture.",},{"id":8,"title":"coldblew","description": "Rich, smooth milk with a smooth texture.",},{"id":9,"title":"cortado","description": "A strong, thick coffee with a smooth texture.",},{"id":10,"title":"flatwhite","description": "A smooth, rich, and creamy coffee with a smooth texture.",}
]
// 上述内容不一定准确,只是一个示例
5)创建menu图像文件夹

在images目录下面,创建menu文件夹,并将已有的coffee图像移动到该文件夹当中。

图像来源: https://github.com/gitdagray/react-native-course/tree/lesson-4/MyApp/assets/images/menu
在这里插入图片描述

6)创建调用图像的文件MenuImages.js

在constants文件夹下面创建文件MenuImages.js

创建数组存储这些咖啡。

import espresso from "@/assets/images/menu/espresso.png"
import americano from "@/assets/images/menu/americano.png"
import latte from "@/assets/images/menu/latte.png"
import cappuccino from "@/assets/images/menu/cappuccino.png"
import macchiato from "@/assets/images/menu/macchiato.png"
import mocha from "@/assets/images/menu/mocha.png"
import flatwhite from "@/assets/images/menu/flatwhite.png"
import cortado from "@/assets/images/menu/cortado.png"
import coldbrew from "@/assets/images/menu/coldbrew.png"
import affogato from "@/assets/images/menu/affogato.png"export default [espresso,americano,latte,cappuccino,macchiato,mocha,flatwhite,cortado,coldbrew,affogato
]

欢迎交流~
一切顺利!


http://www.ppmy.cn/ops/151009.html

相关文章

网络安全 | 防护技术与策略

网络安全 | 防护技术与策略 一、前言二、网络安全防护技术2.1 防火墙技术2.2 加密技术2.3 入侵检测与防范系统&#xff08;IDS/IPS&#xff09;2.4 身份认证技术 三、网络安全策略3.1 网络访问控制策略3.2 数据安全策略3.3 应急响应策略 四、网络安全防护技术与策略的整合与优化…

IM聊天学习资源

文章目录 参考链接使用前端界面简单效果消息窗口平滑滚动至底部vue使用watch监听vuex中的变量变化 websocket握手认证ChatKeyCheckHandlerNettyChatServerNettyChatInitializer 参考链接 zzhua/netty-chat-web - 包括前后端 vue.js实现带表情评论功能前后端实现&#xff08;仿…

数据库管理-第285期 Oracle 23ai:深入浅出向量索引(20250117)

数据库管理285期 20245-01-17 数据库管理-第285期 Oracle 23ai&#xff1a;深入浅出向量索引&#xff08;20250117&#xff09;1 HNSW事务支持解读 2 IVF分区支持解读 3 混合向量索引何时选择混合向量索引为何选择混合向量索引 总结 数据库管理-第285期 Oracle 23ai&#xff1a…

[云讷科技] 用于软件验证的仿真环境

我们使用Pursuit自动驾驶仪为各种场景设计仿真环境&#xff0c;以便用户可以在模拟环境中直接验证他们的软件&#xff0c;无需现场测试。该环境基于Gazebo引擎。 1. 工作区目录 模拟环境的工作区位于提供的U盘中的~/pursuit_space/sitl_space_pursuit中。用户可以按照用户手册…

校园跑腿小程序---任务界面 发布以及后端模板下载

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…

Ubuntu cuda-cudnn中断安装如何卸载

文章目录 问题描述解决方法使用强制移除 问题描述 Ubuntu22.04系统&#xff0c;在终端中执行apt insatll安装或dpkg .deb安装时如果强制关闭终端会导致安装失败&#xff08;安装包会变成iu状态或ru状态&#xff0c;安装成功的应该是ii状态&#xff0c;只需要sudo apt remove p…

代码随想录算法训练营第三十天-贪心算法-763. 划分字母区间

标记字符最远位置&#xff0c;这是人能想到的&#xff1f;定义一个26个字母的数组&#xff0c;下标表示字母的位置&#xff0c;数组值表示当前字母在字符串中遍历过程中所处的位置算法题目无厘头太多&#xff0c;但解法也是太精彩&#xff0c;可是根本记不住&#xff0c;要每日…

Pytorch通信算子组合测试

Pytorch通信算子组合测试 一.背景二.相关链接三.遇到的问题四.操作步骤1.登录服务器2.查看拓扑3.准备测试用例A.准备目录B.用例代码 4.创建docker容器5.查看当前pytorch版本6.运行测试程序 一.背景 测试pytorch通信算子不同配置下的功能及性能测试不同的group组合测试不同的te…