react-native 从入门到实战系列教程一底部导航及页面切换

news2024/9/25 17:18:47

react-native 里面的导航有点繁琐,需要引入 react-navigation 这个库。也是官网推荐的。整个过程不难,就是配置比较繁琐,还会因为网络的原因,时常报错,需要多试几次。排查错误,需要多看文档。安装完依赖,必须重启项目。

效果演示

请添加图片描述

实现步骤

  • 安装
npm i  @react-navigation/native
npm i  @react-navigation/bottom-tabs
  • 页面使用
import React, {useEffect, useState} from 'react';
import {NavigationContainer} from '@react-navigation/native';
import {createBottomTabNavigator} from '@react-navigation/bottom-tabs';
import Ionicons from 'react-native-vector-icons/Ionicons';
import {
  StyleSheet,
  Button,
  View,
  SafeAreaView,
  Text,
  Alert,
  ActivityIndicator,
} from 'react-native';

const Separator = () => <View style={styles.separator} />;

const Loading = () => (
  <View style={styles.loadingContainer}>
    <ActivityIndicator size="large" color="#0000ff" />
    <Text>加载中...</Text>
  </View>
);

function HomeScreen() {
  return (
    <View
      style={{
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        width: '100%',
      }}>
      <Text>Home!</Text>
    </View>
  );
}

function SettingsScreen() {
  return (
    <View
      style={{
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        width: '100%',
      }}>
      <Text>Settings!</Text>
    </View>
  );
}

function UserCenter() {
  return (
    <View
      style={{
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        width: '100%',
      }}>
      <Text>User Center</Text>
    </View>
  );
}

const Tab = createBottomTabNavigator();

const App = () => {
  const [isLoading, setIsLoading] = useState(true);

  const handleSubmit = () => {
    Alert.alert(
      '提交成功',
      '您的信息已提交,我们会尽快与您联系!',
      [{text: '好的'}],
      {cancelable: false},
    );
  };
  const handleSubmit2 = () => {
    Alert.alert('提交成功', '您的信息已提交,请耐心等待!', [{text: '好的'}], {
      cancelable: false,
    });
  };

  useEffect(() => {
    setTimeout(() => {
      setIsLoading(false);
    }, 3000);
  });
  return (
    <SafeAreaView style={styles.container}>
      {isLoading ? (
        <Loading />
      ) : (
        <NavigationContainer>
          <Tab.Navigator
            screenOptions={({route}) => ({
              tabBarIcon: ({focused, color, size}) => {
                let iconName;
                if (route.name === '消息') {
                  iconName = focused
                    ? 'chatbubble-ellipses-sharp'
                    : 'chatbubble-outline';
                } else if (route.name === '工作台') {
                  iconName = focused ? 'desktop' : 'desktop-outline';
                } else if (route.name === '我的') {
                  iconName = focused
                    ? 'person-circle'
                    : 'person-circle-outline';
                }

                return <Ionicons name={iconName} size={size} color={color} />;
              },
              tabBarActiveTintColor: 'tomato',
              tabBarInactiveTintColor: 'gray',
            })}>
            <Tab.Screen
              name="消息"
              component={HomeScreen}
              options={{
                tabBarBadge: 3,
              }}
            />
            <Tab.Screen name="工作台" component={SettingsScreen} />
            <Tab.Screen name="我的" component={UserCenter} />
          </Tab.Navigator>
        </NavigationContainer>
      )}
    </SafeAreaView>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    width: '100%',
    justifyContent: 'center',
  },
  loadingContainer: {
    flex: 1,
    justifyContent: 'center',
    marginHorizontal: 16,
    alignItems: 'center',
  },
  title: {
    textAlign: 'center',
    marginVertical: 8,
  },
  fixToText: {
    flexDirection: 'row',
    justifyContent: 'space-between',
  },
  separator: {
    marginVertical: 8, //垂直距离
    borderBottomColor: '#737373', //底部边框颜色
    borderBottomWidth: StyleSheet.hairlineWidth, //底部边框宽度
  },
  tinyLogo: {
    width: 50,
    height: 50,
  },
  content: {
    marginVertical: 16,
    textAlign: 'left',
  },
});

export default App;

默认情境下,图标是展示的一个打叉的矩形,需要我们配置好图标,才能正常展示。

配置图标

  • 安装依赖
npm i react-native-vector-icons
  • 配置图标
    我这里是安卓,请按照安卓的操作方法配置,https://www.npmjs.com/package/react-native-vector-icons
    在这里插入图片描述
    把安装包下面的字体文件夹改为小写,放到指定的位置
    在这里插入图片描述

    • 查找图标,要参考官方文档:https://oblador.github.io/react-native-vector-icons/#Ionicons
      在这里插入图片描述
  • 参考导航的使用方法。
    react-navigation 的官网: https://reactnavigation.org/docs/tab-based-navigation

这样我们就实现了一个导航效果,然后我们就可以继续丰富我们app的细节内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1971186.html

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

相关文章

Java同城信息付费系统对接微信广告系统小程序源码

解锁同城新商机&#xff01;同城信息付费系统如何高效对接微信广告 &#x1f680; 引言&#xff1a;同城信息付费的新纪元 在这个信息爆炸的时代&#xff0c;同城信息服务平台如雨后春笋般涌现&#xff0c;为用户提供了便捷的生活服务入口。然而&#xff0c;如何在众多平台中…

8月1日SpringBoot学习笔记

今天内容:配置maven 搭建springboot项目 约定大于配置 IOC DI 常用注解 springbean的作用域 springbean的生命周期 Springboot 创建springboot项目 maven项目添加springboot变成的springboot项目 具体步骤参考&#xff1a;http://t.csdnimg.cn/2NTuK与http://t.…

matlab y=sin(x) - 2/π*(x)函数绘制

[TOC](matlab ysin(x) - 2/π*(x)函数绘制) ysin(x) - 2/π*(x) clc; clear; close all; x_axis_length 10; y_axis_length 10; % 创建 x 值向量 x_positive linspace(0.1, 10, 1000); % 正半轴上的 x 值 x_negative linspace(-10, -0.1, 1000); % 负半轴上的 x 值% 计算…

从数学角度理解SVM分类算法

再谈间隔最大化 我们知道&#xff0c;支持向量机是以“间隔”作为损失函数的&#xff0c;支持向量机的学习过程就是使得间隔最大化的过程&#xff0c;若想要了解支持向量机的运转机制&#xff0c;首先就得知道间隔怎么计算。 “间隔大小”是由距离分类“界限”最近的两个数据点…

《计算机网络》(第8版)第1章 概述 复习笔记

第 1 章 概述 一、计算机网络在信息时代中的作用 计算机网络的两个重要功能&#xff1a; 1 &#xff0e;连通性 指互联网上的用户之间是相互连通的。 2 &#xff0e;共享&#xff08;资源共享&#xff09; 资源共享可以是信息共享、软件共享&#xff0c;也可以是硬件共享。此…

Meta新功能生成式AI意味着什么

去年&#xff0c;Meta 推出了 AI 功能&#xff0c;允许广告主创建动态背景、增强图像并生成源自其原始内容的各种广告文本版本。这主要是侧重于通过测试图片和文本等创意元素来优化广告效果。在最新的更新中&#xff0c;Meta 带来了全新的 AI 生成功能&#xff0c;允许广告主依…

Java高级工程师教你解决内存泄漏生产事故方法案例实战

Java高级工程师教你解决内存泄漏宕机生产事故案例实战 一、事故简述与核心日志分析 生产WEB项目&#xff0c;每隔一段时间就宕机了&#xff0c;没有反应&#xff0c;JAVA进程还在&#xff0c;但是请求都没有反应&#xff01; 二、日志分析 org.springframework.web.util.Ne…

jeecg-boot框架activiti定时节点流转错误分析

文章目录 一、项目介绍二、问题复现三、排查过程1、找到报错信息2、找到报错的堆栈信息3.找到错误代码4.分析错误原因4.1、首先要明白SecurityManager是什么&#xff1f;4.2、定时器前的流程跟之前的流程不是同一个流程&#x1f449;定时任务的数据已经生成&#xff0c;那么该如…

Moretl 日志采集 使用说明

永久免费: Gitee下载最新版本 使用咨询: 扫码添加QQ 1: 服务器 部署Moretl文件采集服务.(管理员身份运行) 2. 在<设备电脑>打开 [部署页面],下载 [Client.zip].解压打开[Start.exe] 步骤3: [部署页面]输入远程Token.看到刚刚部署的设备电脑. 3.1 点击[明细],修改[…

Java Excel复杂表头,表头合并单元格

Java Excel复杂表头&#xff0c;表头合并单元格 效果预览 一、maven依赖 <!--操作excel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.1</version><scope>test</…

Sqlserver查询链接服务器数据问题,如何解决??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

群晖NAS使用Docker命令方式安装cpolar内网穿透工具详细流程

文章目录 前言1. 检查安装Container Manager2. 检查开启群晖SSH连接3. Windows SSH 连接群晖4. 下载Cpolar 镜像5. 群晖Docker安装Cpolar 前言 在某些群晖NAS型号版本&#xff0c;无法使用套件安装的时候&#xff0c;我们可以采用Docker的方式进行安装cpolar内网穿透工具&…

连接未来:幂简集成引领API新时代

写在前面 在这个信息爆炸的数字时代&#xff0c;我们迎来了所谓的"数据的黄金时代"。数据不仅仅是数字和信息的集合&#xff0c;它已经成为推动现代企业决策、创新和增长的关键资产。 而API作为数据流通的桥梁&#xff0c;在现代互联网架构中发挥着至关重要的作用。…

Stability AI推出Stable Fast 3D:从单个图像快速生成 3D 模型资产

Stable Fast 3D是Stability AI公司推出的一款革命性的3D资产生成技术&#xff0c;它能够在0.5秒内将单张输入图像转化为详尽的3D模型&#xff0c;为3D重建领域带来了速度和质量上的显著提升。这项技术不仅生成UV展开网格、材料参数和反照率颜色&#xff0c;还支持用户选择四边形…

thinkphp8开发的广告联盟网站系统源码

这款程序是采用国内主流的PHP框架&#xff0c;最新版本thinkphp8.0.4&#xff0c;也是目前市面上功能相对比较强大&#xff0c;界面比较好看的一款全开源的广告联盟系统&#xff0c;程序支持任意二开商业&#xff0c;并且代码无任何加密处理。 程序开发&#xff1a;PHPMySQL …

【ROS 最简单教程 001/300】ROS 概念介绍:机器人元操作系统

ROS&#xff1a;Robot Operating System 【适用于机器人的开源元操作系统】 ROS Plumbing Tools Capabilities Ecosystem 通讯 Plumbing ⭐ 实现ROS不同节点之间的交互工具 Tools ⭐ 工具软件包 (ROS中的开发和调试工具)&#xff0c;提供 仿真 功能&#xff1b;功能 Capabi…

苹果10使用操作

1、关闭应用&#xff1a;要关闭iPhone X的后台任务&#xff0c;必须在多任务界面长按应用卡片&#xff0c;这时缩略图左上角会出现关闭符号&#xff0c;点击关闭符号或者上滑卡片都可以关闭。 注意&#xff1a;在没有长按触发关闭符号的情况下&#xff0c;上滑任务卡片是无法关…

大数据技术原理-Hadoop的安装

摘要 随着大数据时代的到来&#xff0c;Hadoop作为一项重要的分布式计算框架&#xff0c;其安装与配置是大数据技术学习者必须掌握的技能。本文通过实验报告的形式&#xff0c;详细记录了在虚拟机环境下安装Hadoop并配置其为伪分布式模式的全过程。实验过程中&#xff0c;遇到…

【从零开始一步步学习VSOA开发】 概述

概述 概念 VSOA&#xff08;Vehicle SOA&#xff09;是翼辉为了解决任务关键型系统不能适用当前微服务通信架构问题而设计的⼀个轻量级适用于任务关键领域的微服务通信架构&#xff0c;以方便开发者构建大型分布式松耦合软件系统&#xff0c;且支持并行开发。 特点 其主要特…

PAI-DSW中对齐NoteBook和命令行的Python环境

我在命令行使用 pip 安装了neo4j&#xff0c;但是在NoteBook中却无法import成功&#xff0c;问了Chat-GPT才知道可能是NoteBook和命令行的Python不一致造成的。下面将介绍如何验证NoteBook和命令行的Python环境是否一致&#xff0c;以及如何将NoteBook的Python环境修改成命令行…