react-native实践日记--5.ReactNative 项目版本升级,0.61到0.72升级的问题记录(一)

ReactNative的版本迭代太频繁,官方说的是React Native原则上每月发布一个新版本,且目前基本是向前不兼容的,导致项目升级很困难,各种依赖插件问题多多,下面是记录的升级中遇到的主要几个印象深刻的问题。

升级:react-native@0.61.5到react-native@0.72.6、react-navigation4.x到react-navigation6.x、react16到react18

一、环境配置
react-native@0.71要求:
(1)Node 的版本应大于等于 16;
(2)需要 Java Development Kit [JDK] 11,而在0.67以前则需要 JDK 1.8 版本(官方也称 8 版本)
(3)Android SDK需要Android 13 (Tiramisu),SDK Tools需要33.0.0版本,具体可参考官方文档

二、react-navigation升级的问题
我们可以首先去官网看下版本升级都改动了哪些内容,如4.x到5.x的升级:https://reactnavigation.org/docs/5.x/upgrading-from-4.x

1.首先是一些package.json里一些依赖的变动

react-navigation -> @react-navigation/native
react-navigation-stack -> @react-navigation/stack
react-navigation-tabs -> @react-navigation/bottom-tabs, @react-navigation/material-top-tabs
react-navigation-material-bottom-tabs -> @react-navigation/material-bottom-tabs
react-navigation-drawer -> @react-navigation/drawer

2.createAppContainer改成NavigationContainer

/*** 4.x版本 ***/
import { createAppContainer } from 'react-navigation';
import { createStackNavigator } from 'react-navigation-stack';const RootStack = createStackNavigator({ /* your routes here */ });
const AppContainer = createAppContainer(RootStack);// Now AppContainer is the main component for React to render
export default AppContainer;/*** 6.x版本 ***/
import { NavigationContainer } from '@react-navigation/native';export default function App() {return <NavigationContainer>{/*...*/}</NavigationContainer>;
}

3.路由的配置

/*** 4.x版本 ***/
/*通过createStackNavigator这个Api方法配置路由导航*/
const RootStack = createStackNavigator({Home: {screen: HomeScreen,navigationOptions: { title: 'My app' },},Profile: {screen: ProfileScreen,params: { user: 'me' },},},{initialRouteName: 'Home',defaultNavigationOptions: {gestureEnabled: false,},}
);/*** 6.x版本 ***/
/*路由的嵌套和4.x是一样的,只是现在是在组件中配置导航器,所有的配置都作为props参数传递给导航Navigator;  
使用Stack.Screen配置路由;  
参数params配置在Screen的initialParams;  
navigationOptions配置在Screen的options;
defaultNavigationOptions配置在Navigator的screenOptions;*/import { createStackNavigator } from '@react-navigation/stack';
const Stack = createStackNavigator();function RootStack() {return (<Stack.NavigatorinitialRouteName="Home"screenOptions={{ gestureEnabled: false }}><Stack.Screenname="Home"component={HomeScreen}options={{ title: 'My app' }}/><Stack.Screenname="Profile"component={ProfileScreen}initialParams={{ user: 'me' }}/></Stack.Navigator>);
}

4.navigation对象
4.x中navigation中包含各种方法以及screen的state等,在5.x中screen的state则从route中获取

/*** 4.x版本 ***/
class DetailsScreen extends React.Component {render() {const userId = this.props.navigation.state.params.user;//...}
}/*** 6.x版本 ***/
function ProfileScreen({ route }) {const userId = route.params.user;// ...
}

三、关于react-native中的storage存储
之前是在react-native中有个AsyncStorage,后来废弃,官方推荐@react-native-community/async-storage,现在这个库又迁移到@react-native-async-storage/async-storage,也不知为啥,反正咱们就用这个新的库就行,使用也很简单,如下:

//1.安装
npm i @react-native-async-storage/async-storage;//2.引入使用
import AsyncStorage from '@react-native-community/async-storage';export const storage = new Storage({// 最大容量,默认值1000条数据循环存储size: 5000,// 存储引擎:对于RN使用AsyncStorage,对于web使用window.localStorage// 如果不指定则数据只会保存在内存中,重启后即丢失storageBackend: AsyncStorage,// 数据过期时间,默认一整天(1000 * 3600 * 24 毫秒),设为null则永不过期defaultExpires: 1000 * 3600 * 24,// 读写时在内存中缓存数据。默认启用。enableCache: true,// 如果storage中没有相应数据,或数据已过期,// 则会调用相应的sync方法,无缝返回最新数据sync: {TOKEN() {//token 过期后跳转到登录页console.log('token expires');storage.remove({key: config.SAVE_TOKEN_KEY});return '';}}
});//保存token凭证
export function saveToken(token) {storage.save({key: config.SAVE_TOKEN_KEY,data: token,autoSync: true,expires: 1000 * 3600 * 24 //有效期1天});
}

未完待续!

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

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

相关文章

教你5步学会用Llama2:我见过最简单的大模型教学

在这篇博客中&#xff0c;Meta 探讨了使用 Llama 2 的五个步骤&#xff0c;以便使用者在自己的项目中充分利用 Llama 2 的优势。同时详细介绍 Llama 2 的关键概念、设置方法、可用资源&#xff0c;并提供一步步设置和运行 Llama 2 的流程。 Meta 开源的 Llama 2 包括模型权重和…

Java开发项目之KTV点歌系统设计和实现

项目介绍 本系统实现KTV点歌管理的信息化&#xff0c;可以方便管理员进行更加方便快捷的管理。系统的主要使用者分为管理员和普通用户。 管理员功能模块&#xff1a; 个人中心、用户管理、歌曲库管理、歌曲类型管理、点歌信息管理。 普通用户功能模块&#xff1a; 个人中心…

一、CSharp_Basic:什么是.Net平台?什么是.Net FrameWork?什么是C#?

什么是.Net平台&#xff1f; 在了解C#之前&#xff0c;我们应该先了解一下什么是.Net平台。 .Net的诞生 2000年&#xff0c;这时候的微软凭借其Windows操作系统庞大的用户基数&#xff0c;推出了.Net1.0的标准。 也就是实现在Windows平台上面开发和应用程序的概念。我们可以简…

P3 Linux应用编程:系统调用与库函数

前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨✨✨ &#x1f6f8;推荐专栏3: ​​​​​​《 链表_Chen…

shell脚本部署重启java服务

背景 一些小型项目未上k8s&#xff0c;直接在云服务器上部署&#xff0c;经常手动部署jar包&#xff0c;现记录常用shell脚本&#xff0c;里面都有注释&#xff0c;主要是重启服务。 #!/bin/bash# 定义应用程序名称和路径 JAR_NAME"demo-0.0.1.jar" JAR_PATH"…

BUUCTF [RoarCTF2019]黄金6年 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。 密文&#xff1a; 下载附件&#xff0c;得到.mp4文件。 attachment 解题思路&#xff1a; 1、浅浅的看了一遍&#xff0c;没发现什么有用的内容。放到Kinovea中&#xff0c;慢倍…

通用plantuml模板头

通用plantuml文件 startuml participant Admin order 0 #87CEFA // 参与者、顺序、颜色 participant Student order 1 #87CEFA participant Teacher order 2 #87CEFA participant TestPlayer order 3 #87CEFA participant Class order 4 #87CEFA participant Subject order …

轻量封装WebGPU渲染系统示例<42>- vsm阴影实现过程(源码)

前向实时渲染vsm阴影实现的主要步骤: 1. 编码深度数据&#xff0c;存到一个rtt中。 2. 纵向和横向执行遮挡信息blur filter sampling, 存到对应的rtt中。 3. 将上一步的结果(rtt)应用到可接收阴影的材质中。 具体代码情况文章最后附上的实现源码。 当前示例源码github地址: …

uniapp vue3.2+ts h5端分环境打包

根目录创建 package.json文件 {"name": "项目名称","version": "1.0.0","description": "","main": "main.js","scripts": {"test": "echo \"Error: no test…

力扣labuladong一刷day25天

力扣labuladong一刷day24天 一、870. 优势洗牌 题目链接&#xff1a;https://leetcode.cn/problems/advantage-shuffle/ 思路&#xff1a;这个就和田忌赛马是一样的&#xff0c;要求nums1[i]>nums2[i]才叫有优势&#xff0c;那么只需要把nums1和nums2都排序&#xff0c;逐…

react native 环境准备

一、必备安装 1、安装node 注意 Node 的版本应大于等于 16&#xff0c;安装完 Node 后建议设置 npm 镜像&#xff08;淘宝源&#xff09;以加速后面的过程&#xff08;或使用科学上网工具&#xff09;。 node下载地址&#xff1a;Download | Node.js设置淘宝源 npm config s…

zabbix_sender——向zabbix交互的sdk

zabbix给我们提供了win32的交互方法。地址为src\zabbix_sender\win32\zabbix_sender.c zabbix_sender_send_values 函数声明为: int zabbix_sender_send_values(const char *address, unsigned short port, const char *source,const zabbix_sender_value_t *values

GEE:梯度卷积

作者:CSDN @ _养乐多_ 本文将介绍在 Google Earth Engine(GEE)平台上,进行梯度卷积操作的代码框架、核心函数和多种卷积核,比如 Roberts、Prewitt、Sobel、各向同性算子、Compass算子、拉普拉斯算子、不同方向线性检测算子等。 结果如下图所示, 文章目录 一、常用的梯度…

数学建模之典型相关分析

发现新天地,欢迎访问 介绍 典型相关分析&#xff08;Canonical Correlation analysis&#xff09;研究两组变量&#xff08;每组变量中都可能有多个指标&#xff09;之间相关关系的一种多元统计方法。它能够揭示出两组变量之间的内在联系。 例子 我们要探究观众和业内人士对…

非应届生简历模板13篇

无论您是职场新人还是转行求职者&#xff0c;一份出色的简历都是获得心仪岗位的关键。本文为大家精选了13篇专业的非应届生简历模板&#xff0c;无论您的经验如何&#xff0c;都可以灵活参考借鉴&#xff0c;提升自己的简历质量。让简历脱颖而出&#xff0c;轻松斩获心仪职位&a…

16.字符串处理函数——字符串长度函数

文章目录 前言一、题目描述 二、解题 程序运行代码 总结 前言 本系列为字符串处理函数编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 二、解题 程序运行代码 #include<stdio.h> #include<string.h> int main() {char str[ ]"0123\0456…

Java基础——方法可变长参数

JavaSE 5.0中提供了Varargs&#xff08;variable number of arguments&#xff09;机制&#xff0c;允许直接定义能和多个实参相匹配的形参。 声明格式&#xff1a; [访问权限修饰符] [其他修饰符] 返回值类型 方法名(形参列表&#xff0c;参数类型... 参数名) {//方法体; }说…

mac安装解压缩rar后缀文件踩坑

mac默认能够解压缩zip后缀的文件&#xff0c;如果是rar后缀的自己需要下载相关的工具解压 下载地址&#xff1a; https://www.rarlab.com/download.htm mac我是因特尔芯片所以下载 x64 然后解压缩文件进入目录 rar中 将可执行文件 rar、unrar 移动到 /usr/local/bin目录下即…

[架构之路-254]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 全程概述

目录 一、软件架构概述 1.1 什么是软件架构 1.2 为什么需要软件架构设计 1.3 软件架构设计在软件设计中位置 &#xff08;1&#xff09;软件架构设计&#xff08;层次划分、模块划分、职责分工&#xff09;&#xff1a; &#xff08;2&#xff09;软件高层设计、概要设计…

精准长尾关键词批量挖掘工具,长尾关键词挖掘正确使用方法

互联网时代&#xff0c;SEO已然成为网站推广的关键一环。而在SEO的世界里&#xff0c;长尾关键词无疑是一块被广泛忽视却蕴含着巨大潜力的宝地。 什么是长尾关键词 长尾关键词&#xff0c;指的是那些相对不那么热门、搜索量较低但更为具体、更贴近用户真实需求的关键词。与短…