React Native 路由篇 react-navigation

news2024/10/5 15:44:48

1.我这边使用的是react-navigation,参照官网安装完启动,执行 npm install @react-navigation/native。在安卓模拟器会报这个错误“invariant violation: requirenativecomponent: “rncsafeareaprovider” was not found in the uimanager”,其实除了安装react-navigation,我们还需安装如下插件:

npm install react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view

2.新建navigation/index.js、src/page目录/文件:在这里插入图片描述
3.假设我们APP,有首页、产品,购物车、个人中心四个模块,我们在src/page里新建四个目录Home、Product、ShoppingCart、Mine,并各建一个index.js文件。
在这里插入图片描述
4.由于我们在项目中可能会用到一些icon,这里我们使用这个react-native-vector-icons库

npm i react-native-vector-icons

针对Andriod ,我们还需作如下配置:
①在android/app/build.gradle添加:

apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
implementation project(':react-native-vector-icons')

②在android/settings.gradle添加:

apply plugin: 'com.android.application'
// 新加的代码
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"

android {
  ...
}

dependencies {
  implementation fileTree(dir: "libs", include: ["*.jar"])
  //noinspection GradleDynamicVersion
  implementation "com.facebook.react:react-native:+"  // From node_modules
  // 新加的代码
  implementation project(':react-native-vector-icons')
}

③我的版本是用的"react-native-vector-icons": “^9.2.0”,所以不需要在android/app/src/main/java/MainApplication.java,添加任何代码,与react-native-vector-icons的推荐写法不一致

④引用的话,直接在所需要的地方引入即可使用:

import Icon from 'react-native-vector-icons/FontAwesome';
const myIcon = <Icon name="home" size={30} color="#900" />;
//  size表示这个icon的大小,name表示用的是哪个icon,color表示这个icon显示的颜色

5.配置路由
①首先我们先配置APP底部的路由,我们在navigation目录中新建BottomTabBar.js,这里我们需要用到@react-navigation/bottom-tabs插件,首先安装插件 npm i @react-navigation/bottom-tabs

 // BottomTabBar.js
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import Home from '../src/page/Home/index';
import Product from '../src/page/Product/index';
import ShoppingCart from '../src/page/ShoppingCart/index';
import Mine from '../src/page/Mine/index';
import Icon from 'react-native-vector-icons/Ionicons';
const Tab = createBottomTabNavigator();
export default function TabBar() {
    return (
        <Tab.Navigator
            screenOptions={({ route }) => ({
                tabBarIcon: ({ focused, color, size }) => {
                let iconName;
                if (route.name === 'Home') {
                        iconName = focused
                        ? 'home'
                        : 'home-outline';
                } else if (route.name === 'Product') {
                        iconName = focused ? 'rocket' : 'rocket-outline';
                }else if (route.name === 'ShoppingCart') {
                        iconName = focused ? 'cart' : 'cart-outline';
                }else if (route.name === 'Mine') {
                        iconName = focused ? 'person' : 'person-outline';
                }
        
                    // You can return any component that you like here!
                return <Icon name={iconName} size={size} color={color} />;
                },
                tabBarActiveTintColor: 'tomato',
                tabBarInactiveTintColor: 'gray',
                })}
            >
            <Tab.Screen name="Home" component={Home} />
            <Tab.Screen name="Product" component={Product} />
            <Tab.Screen name="ShoppingCart" component={ShoppingCart} />
            <Tab.Screen name="Mine" component={Mine} />
        </Tab.Navigator>
    );
  }

②我们配置stack路由,也就是非TAB栏的路由,比如像详情页的路由,我们在navigation/index.js配置,先安装插件 npm i @react-navigation/stack

//index.js
import { createStackNavigator } from '@react-navigation/stack';
import BottomTabBar from './BottomTabBar' // 引入底部TAB栏
import ProductDetails from '../src/page/Product/Detail/index'; // =>产品详情页
import Scan from '../src/page/Mine/Scan/index'; // => 个人中心 扫一扫页面
const Stack = createStackNavigator();
  // stack路由配置
  export default function Navigation(){
    return (
        <Stack.Navigator>
            <Stack.Screen name={"Navigation"} options={{headerShown:false}} component={BottomTabBar} />
            <Stack.Screen name={"ProductDetails"} component={ProductDetails} />
            <Stack.Screen name={"Scan"} component={Scan} />
        </Stack.Navigator>
    )
}

③ 修改App.js文件

// In App.js in a new project

import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import Navigation from './navigation/index'

function App() {
  return (
    <NavigationContainer>
      <Navigation />
    </NavigationContainer>
  );
}

export default App;

效果如下:

React Native 路由效果图

代码已上传到 git: https://github.com/pengmaoxing/RN.git

上一篇:React Native windows环境搭建

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

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

相关文章

Java网络编程

一、IO模型 IO模型就是说用什么样的通道进行数据的发送和接收&#xff0c;Java共支持3种网络编程IO模式&#xff1a; BIONIOAIO 1.BIO 1.1基本介绍 Blocking I/O&#xff0c;同步阻塞&#xff08;传统阻塞型&#xff09;&#xff0c;服务器实现模式为一个连接一个线程&…

CSS初级教程(轮廓)【第五天】

CSS初级教程【第五天】【1】CSS 框模型【2】CSS 轮廓【3】CSS 轮廓宽度【4】CSS 轮廓颜色【5】CSS 轮廓简写【6】CSS 轮廓偏移【7】所有 CSS 轮廓属性CSS上回学习链接 CSS初级教程 颜色【第一天】 CSS初级教程 背景【第二天】 CSS初级教程 边框【第三天】 CSS初级教程 边距、高…

数据压缩算法PCA使用指南

来源&#xff1a;投稿 作者&#xff1a;小灰灰 编辑&#xff1a;学姐 PCA主成分分析算法 PCA的使用范围 PCA(principal Component Analysis)&#xff0c;即主成分分析方法&#xff0c;是一种使用最广泛的数据压缩算法。 在PCA中&#xff0c;数据从原来的坐标系转换到新的坐标…

【2023.01.03】定时执行专家 V6.5 更新日志 - TimingExecutor V6.5 Change Log

目录 ◆ 最新版下载链接 ◆ 软件更新日志 – TimingExecutor Full Change Log ▼ 2023-01-03 V6.5 ▼ 2022-12-25 V6.4 ▼ 2022-11-15 V6.3 ▼ 2022-10-01 V6.2 ▼ 2022-07-30 V6.1&#xff08;Build 769.30072022&#xff09; ▼ 2022-06-30 V6.0 ▼ 2022-…

《学术规范与论文写作》总结

文章目录一、写作规范二、写作准备三、论文架构3.1 标题3.2 摘要3.3 关键词&#xff08;可省&#xff09;3.4 引言3.5 相关工作&#xff08;研究背景&#xff09;3.6 实现细节3.7 实验部分3.8 结论四、写作技巧五、其他技巧5.1 算法伪代码5.2 图片5.3 写作语言一、写作规范 写…

短视频剪辑素材在哪里找?

视频剪辑没素材&#xff0c;推荐5个网站帮你解决&#xff0c;免费可商用&#xff0c;建议收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 网站有超多视频素材&#xff0c;全部都是高清无水印&#xff0c;各种类型都有&#xff0c;像自然、城市…

【Linux】文件操作|文件描述符|重定向

文章目录1.文件操作系统调用的几个基本接口openwritereadlseekwrite read close lseek ,对比C文件相关接口2.如何理解文件操作&#xff1f;3.文件描述符fd文件描述符的分配规则重定向使用 dup2 系统调用进行重定向4.在自己的shell中添加重定向功能&#xff1a;1.文件操作系统调…

唯品会api_sign分析

本次分析的案例是唯品会app,版本号:7.45.6 抓个包,请求头中有个api_sign,该字段就是本次分析的对象。 1.jadx 静态分析 直接搜索关键词:api_sign= 跟进去,来到这里。 这里用到了VCSPSecurityBasicService.apiSign()方法,双击两下,找到函数的定义地方。 这里引用到的方…

【机器学习实战】四、实现线性回归模型案例

线性回归案例 一、初始化方法 1.对数据进行预处理模块&#xff0c;调用prepare_for_training方法&#xff0c;得到返回值data_processed, features_mean, features_deviation 2.得到所有的特征个数&#xff0c;即data的特征维数的列(行shape[0]&#xff0c;列shape[1]) 3.初始…

怎么获取level2行情接口数据?

怎么获取level2行情接口数据比较方便呢&#xff1f;其实level2行情接口可以实时计算沪深所有股票数据&#xff0c;主要是可以让交易者方便引用和计算公式再进入股票池&#xff0c;就比如说一个分笔数据含有10-20个分笔数据&#xff0c;用分笔数据计算的资金流入数据不准确&…

< Linux > 进程控制

目录 1、进程创建 fork函数 fork函数返回值 写时拷贝 fork常规用法 fork调用失败的原因 2、进程终止 2.1、进程退出常见场景 2.2、进程退出码 2.3、进程常见退出方法 _exit函数 exit函数 return退出 2.4、关于终止&#xff0c;内核做了什么 3、进程等待 3.1、进程等待必要性…

解决VS2019+Qt5+Vcpkg工程无法调试但Release正常运行的问题

前言——这个问题可能比较小众&#xff0c;但是因为解决了我自己的问题&#xff0c;所以特此把解决方法分享出来&#xff0c;以给特定的人提供必要的帮助。 项目原因&#xff0c;一直使用VS2019Qt5Vcpkg&#xff0c;无奈程序一直无法进行调试&#xff0c;Release模式倒是正常运…

计算机图形学 Ray Trace 学习笔记

屏幕上的一个像素&#xff0c;是通过各种反射、折射而共同组成的&#xff0c;每个反射折射的点&#xff0c;都会考虑光源是否有直接照射到反射折射的点上&#xff0c;反射与折射之间会存在能量衰减&#xff0c;最终汇总在屏幕的像素上。 计算是哪一个三角形被射线打中&#xff…

Hive SQL 每日SQL

1、查询订单明细表&#xff08;order_detail&#xff09;中销量&#xff08;下单件数&#xff09;排名第二的商品id&#xff0c;如果不存在返回null&#xff0c;如果存在多个排名第二的商品则需要全部返回。 需要用到的表&#xff1a; 订单明细表&#xff1a;order_detail 代码…

【谷粒商城基础篇】仓储服务:仓库维护

谷粒商城笔记合集 分布式基础篇分布式高级篇高可用集群篇简介&环境搭建项目简介与分布式概念&#xff08;第一、二章&#xff09;基础环境搭建&#xff08;第三章&#xff09;整合SpringCloud整合SpringCloud、SpringCloud alibaba&#xff08;第四、五章&#xff09;前端知…

android 创建aar包

1. 背景 由于新入职公司在做硬件接入的项目&#xff0c;需要接入多款硬件&#xff0c;而且&#xff0c;几个app的功能不太一样。于是&#xff0c;需要模块化开发&#xff0c;并且许多东西都是可以复用的&#xff08;像网络框架、log、shareprefrence、权限申请等&#xff09;。…

嵌入式HLS 案例开发步骤分享——Zynq-7010/20工业开发板(1)

目 录 前 言 3 1 HLS 开发流程说明 5 1.1 HLS 工程导入 5 1.2 编译与仿真 6 1.3 综合 8 1.4 IP 核封装 10 1.5 IP 核测试 14 前 言 本文主要介绍 HLS 案例的使用说明,适用开发环境: Windows 7/10 64bit、Xilinx Vivado 2017.4 、Xilinx Vivado HLS 2017.4 、Xilinx…

数据结构|排序算法详解

​​​​​​​目录 一.插入类 1.直接插入排序 2.希尔排序 二.选择类&#xff0c;排一次选出一个最值 1.选择排序 2.堆排序 三.交换类&#xff0c;通过一直交换一次确定数字的位置 1.冒泡排序 2.快速排序 2.1 hoare版本 2.2挖坑法 2.3前后指针法 四.归并类 1.归并…

Go第 5 章:程序流程控制

第五章程序流程控制 5.1程序流程控制介绍 在程序中&#xff0c;程序运行的流程控制决定程序是如何执行的&#xff0c;是我们必须掌握的&#xff0c;主要有三大流程控 制语句。 1)顺序控制 2)分支控制 3)循环控制 5.2 顺序控制 程序从上到下逐行地执行&#xff0c;中间没有任…

C++标准库的智能指针:shared_ptr、weak_ptr和unique_ptr

文章目录智能指针shared_ptr模版类week_ptr模版类unique_ptrC中是没有内存回收机制的&#xff0c;我在之前的一篇文章中提到使用指针的一些基本方法。C在std标准库中也提供了三种封装过的指针模版类&#xff0c;称作为智能指针&#xff1a;shared_ptrunique_ptrweek_ptr 我这里…