【笔记】React-Native Navigation页面导航

/**
* 须知:a bare React Native Project(not an Expo managed project)
* 
* React官方文档:https://reactnative.dev/docs/navigation
* 
* 当前文档基于6.x
* React Navigation文档:https://reactnavigation.org/docs/getting-started
* 
* "@react-navigation/native": "^6.1.9",
* "@react-navigation/native-stack": "^6.9.17",
* "react": "18.2.0",
* "react-native": "0.73.2",
* "react-native-safe-area-context": "^4.8.2",
* "react-native-screens": "^3.29.0"
*/

一、基本使用

1、首先要安装(npm install 或 yarn add)

yarn add @react-navigation/native @react-navigation/native-stack

2、需要结合适配android/IOS设备屏幕的依赖才可以使用

yarn add react-native-screens react-native-safe-area-context

3、现在开始改造默认的App.tsx(新建两个组件:Home.tsx页面内容是原来的App.tsx稍微做修改、AboutUs.tsx)

import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { View } from 'react-native';
import Home from './src/views/Home';
import AboutUs from './src/views/AboutUs';const Stack = createNativeStackNavigator()const App = () => {return (<NavigationContainer><Stack.Navigator initialRouteName='Home'><Stack.Screenname='Home'component={Home}options={{title: 'Hi!Mortal'}} /><Stack.Screen name="AboutUs" component={AboutUs} /></Stack.Navigator></NavigationContainer>);
}export default App;

2、当前是用安卓设备测试,所以按照官方文档还需要在MainActivity.kt重写onCreate方法

3、在Home.tsx组件中导航到AboutUs.tsx

如果出现错误提示,可以正常运行,但还是要统一严格使用TypeScript(暂时不用太关心navigation的来源)

方式1

方式2

可以将navigation打印出来看有哪些函数可以调用,满多API供我们调用

{"addListener": [Function addListener], "canGoBack": [Function canGoBack], "dispatch": [Function dispatch], "getId": [Function getId], "getParent": [Function getParent], "getState": [Function anonymous], "goBack": [Function anonymous], "isFocused": [Function isFocused], "navigate": [Function anonymous], "pop": [Function anonymous], "popToTop": [Function anonymous], "push": [Function anonymous], "removeListener": [Function removeListener], "replace": [Function anonymous], "reset": [Function anonymous], "setOptions": [Function setOptions], "setParams": [Function anonymous]}

加个跳转入口

到此基本的路由跳转已经完成(navigation.push、navigation.goBack、navigation.popToTop基础用法待研究)

二、页面传参数

1、可以在App.tsx里定义initialParams的类型或者不定义,这个视情况而定

2、Home.tsx里重新对navigation定义类型(这里定义了严格的类型),因为之前是any类型,所以调用是这样的navigation?.navigate(xxx)

这里只是额外多了showAppVersion、otherParams两个字段,那App.tsx里的initialParams有什么用呢?

3、接受页面传参,是用route去取值的

到这里已经完成了基础的工作准备,现在可以打印出来看route携带了哪些信息,params里可以看到多了theme字段,没错这个就是之前定义的initialParams,所以视情况而定,比如每个页面都需要相同的数据源时。

{"key": "AboutUs-nb2KVya6DJRe_JfecBAR8","name": "AboutUs","params": {"otherParams": "Good Good Study! Day Day Up!","showAppVersion": true,"theme": "dark"},"path": undefined
}

4、最后贴一张效果图

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes实战(二十一)-event事件持久化

默认情况下&#xff0c; K8S 会将事件保留在 etcd 中一个小时&#xff0c;超过1小时的事件将无法看到&#xff0c;所以 K8S 默认保留事件的时间不足以来更深入的了解集群&#xff0c;所以将事件导出到集群外存储是有必要的&#xff0c;以实现可观测性和告警。 Event事件持久化…

《二叉树》——3(层序遍历)

目录 前言&#xff1a; 层序遍历: 解析&#xff1a; 前言&#xff1a; 本文主讲链式二叉树的层序遍历&#xff0c;在前面的张篇blog我们初步实现了链式二叉树递归部分的内容&#xff0c;对于递归算法的学习和思维方式我们仍然需要不断加强&#xff0c;所以将对链式二叉树进行…

Outlook技巧:如何插入可以用指定浏览器打开的链接

Outlook中的链接&#xff0c;有时直接点击无法打开&#xff0c;找本地Edge才能打开。如何让Url能够指定打开的浏览器呢&#xff1f; 插入链接时&#xff0c;直接加上前缀Microsoft-edge即可。 操作步骤&#xff1a; 编辑邮件界面&#xff0c;菜单选择插入-》链接 在链接地址…

MongoDB数据模型和WiredTiger读写模型

MongoDB数据模型 思考&#xff1a;MongoDB为什么会使用BSON&#xff1f; BSON协议与数据类型 JSON JSON是当今非常通用的一种跨语言Web数据交互格式&#xff0c;属于ECMAScript标准规范的一个子集。JSON&#xff08;JavaScript Object Notation, JS对象简谱&#xff09;即J…

客户端熔断器基于golang Grpc具体实现(Google SRE客户端熔断器)

目录 前言 一、什么是Google SRE 二、Google SRE 熔断器的工作流程&#xff1a; 三、Google SRE GRPC 代码实现 四、测试用例 大家可以关注个人博客&#xff1a;xingxing – Web Developer from Somewhere 有关后端问题探讨 前言 当某个用户超过资源配额时&#xff0c…

搜维尔科技:第九届元宇宙数字人大赛,参赛小组报名确认公告!

各位参赛选手大家好&#xff0c;近期已收到新增报名信息如下表&#xff0c;请各位参赛选手确认&#xff0c;如果信息有误或信息不完整请电话联系赛务组工作人员进行更正 随着元宇宙时代的来临&#xff0c;数字人设计成为了创新前沿领域之一。为了提高大学生元宇宙虚拟人角色策划…

将java对象转换为json字符串的几种常用方法

目录 1.关于json 2.实现方式 1.Gson 2.jackson 3.fastjson 3.与前端的联系 1.关于json JSON是一种轻量级的数据交换格式。它由Douglas Crockford在2001年创造。JSON的全称是JavaScript Object Notation&#xff0c;它是一种文本格式&#xff0c;可以轻松地在各种平台之间传…

RK356X RKAndroid12 TF卡配置 自动挂载

RK356X RKAndroid12 TF卡配置 自动挂载 RK3568 有三个SDMMC接口&#xff0c;分别为SDMMC0 SDMMC1 SDMMC2 DTS 配置 1. max-frequency <150000000>; 此配置设置 SD 卡的运行频率&#xff0c;虽然设置为 150M &#xff0c;但是还要根据 SD 卡的不同模式进行调整。这…

Vue学习总结

声明&#xff1a;本文来源于黑马程序员PDF讲义 双向绑定&#xff1a; 修改表单项标签&#xff0c;发现vue对象data中的数据也发生了变化 双向绑定的作用&#xff1a;可以获取表单的数据的值&#xff0c;然后提交给服务器 事件绑定 v-on: 用来给html标签绑定事件的。需要注意…

Redis 布隆过滤器

布隆过滤器 这一篇文章主要是记录布隆过滤器的使用和认识 主要参考了如下的blog https://blog.csdn.net/weixin_42972832/article/details/131211665 他讲的还不错 简单的来说,布隆过滤器,实际上就像是一个集合,拿redis的key来举例来说,布隆过滤器的设置就是去过滤不属于redi…

电源模块欠压保护点测试方法分享 纳米软件

电源欠压保护原理 欠压保护是指当电源电压低于一定值时&#xff0c;电源的保护功能会及时断开电路&#xff0c;避免设备受到损坏。电源欠压保护一般是通过一个或多个传感器来检测电压&#xff0c;当电压低于设定值时就会触发电源的保护功能&#xff0c;断开电路&#xff0c;保护…

文本生成高清、连贯视频,谷歌推出时空扩散模型

谷歌研究人员推出了创新性文本生成视频模型——Lumiere。 与传统模型不同的是&#xff0c;Lumiere采用了一种时空扩散&#xff08;Space-time&#xff09;U-Net架构&#xff0c;可以在单次推理中生成整个视频的所有时间段&#xff0c;能明显增强生成视频的动作连贯性&#xff…