ReactNative常用插件使用

2023-10-30

项目版本介绍

目前使用的项目node版本v14.17.5, npm版本6.14.14, reactNative项目使用的模板结合typescript语法的项目模板架构,安装的方式如下:

npx react-native init xxx(项目名) --template react-native-template-typescript

完成之后可直接运行yarn android 或 npm run android 将项目启动。

1. react-native-config

查看reactNative插件的网址js.coach
目前配置reactNative多环境变量的方式最好用的莫过于react-native-config这个插件,可以在根目录中创建一个.env文件,内容可以测试下,配置成这样:

API_URL=https://myapi.com
GOOGLE_MAPS_API_KEY=abcdefgh

在App.tsx文件中加入:

import Config from 'react-native-config';
<Text>{Config.API_URL}</Text>
<Text>{Config.GOOGLE_MAPS_API_KEY}</Text>

之后按照jscoach的步骤:
一 yarn add react-native-config
二 ReactNative 0.60版本以后可以自动引入无需连接 react-native link react-native-config
三 iOS方面需要先进入项目,之后(cd ios; pod install)
四 Android方面需手工引入

  1. android/settings.gradle
    include ‘:react-native-config’
    project(’:react-native-config’).projectDir = new File(rootProject.projectDir, ‘…/node_modules/react-native-config/android’)

  2. android/app/build.gradle
    dependencies {
    implementation “com.facebook.react:react-native:+” // From node_modules
    implementation project(’:react-native-config’)
    }
    最后一行加上 apply from: project(’:react-native-config’).projectDir.getPath() + “/dotenv.gradle”

完成之后可直接运行yarn android 或 npm run android 将项目启动。查看是否有了输出内容。
在这里插入图片描述

2. 绝对路径配置

项目目录繁杂,需要配置可配置化的路径进行统一方式引用,此时需要安装下载插件babel-plugin-module-resolver

yarn add -D babel-plugin-module-resolver

在项目根目录下的babel.config.js中配置plugins

plugins: [
    [
      'module-resolver',
      {
        root: ['./src'],
        alias: {
          '@': './src',
          '@/utils': './src/utils',
          '@/assets': './src/assets',
          '@/components': './src/components',
          '@/models': './src/models',
          '@/navigator': './src/navigator',
          '@/config': './src/config',
          '@/pages': './src/pages',
        },
      },
    ],
  ],

如下图这样的引用便不会报错,另外还需配置tsconfig.json中baseUrl和path属性

import {test} from '@/utils';
"baseUrl": "./src",                       /* Base directory to resolve non-absolute module names. */
"paths": {
  "@/assets/*": ["assets/*"],
  "@/components/*": ["components/*"],
  "@/config/*": ["config/*"],
  "@/models/*": ["models/*"],
  "@/navigator/*": ["navigator/*"],
  "@/pages/*": ["pages/*"],
  "@/utils/*": ["utils/*"]
},     

3. 安装React Native堆栈式导航器

React Navigation 官网可以查看React Native常用的基本堆栈式导航器进行类似前端Vue, React方法各自的路由方式导航模式。安装模式的参考网站

1.使用yarn命令行安装(此处参考我本人这里,官网这块有点问题)

	yarn add react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view

2.MacOs用户对应的IOS的项目需要进行pod下载
cd ios; pod install

3.在android项目中使用react-native-screens该插件需要在部分文件需要配置:

1)在android/app/src/main/java/文件项目名/MainActivity.java中加入代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(null);
}

2)同时在MainActivity.java最上面引入这段代码

import android.os.Bundle;

3)项目最底层的index.js文件中需要引入:

import 'react-native-gesture-handler';

4)项目中下载堆栈式导航插件Stack Navigator

yarn add @react-navigation/stack

在安装好后可以yarn android 或者 yarn ios 跑一下对应的原生环境尝试是否有报错情况,有的话自行调优或者参考我这里的解决方案总集
这里编写一下主要的关于路由的代码逻辑:

// navigation/index.tsx
import React from 'react';
import {Platform, StyleSheet} from 'react-native';
import {NavigationContainer} from '@react-navigation/native';
import {
  CardStyleInterpolators,
  createStackNavigator,
  HeaderStyleInterpolators,
  StackNavigationProp,
} from '@react-navigation/stack';
import Home from '@/pages/Home';
import Detail from '@/pages/Detail';

export type RootStackParamList = {
  Home: undefined;
  Detail: {
    id: number;
  };
};

export type RootStackNavigation = StackNavigationProp<RootStackParamList>;

let Stack = createStackNavigator<RootStackParamList>();

const MyStackNavigation = () => {
  return (
    // <Text>11</Text>
    <NavigationContainer>
      <Stack.Navigator
        // 所有堆栈导航的配置
        screenOptions={{
          // 头部导航居中
          headerTitleAlign: 'center',
          // 标题栏模式, ios(float): 公用一个标题栏    android(screen): 每个页面一个标题栏  none 整个标题栏消失
          headerMode: 'float',
          // 设置头部的动画效果
          headerStyleInterpolator: HeaderStyleInterpolators.forUIKit,
          // 设置底部页面的动画效果
          cardStyleInterpolator: CardStyleInterpolators.forHorizontalIOS,
          // android 默认关闭,所以设置默认开启
          gestureEnabled: true,
          // android 默认手势方向垂直,所以设置默认水平
          gestureDirection: 'horizontal',
          // android头部与页面之间有投影效果(由于android没有阴影效果),所以统一设置
          headerStyle: {
            ...Platform.select({
              android: {
                elevation: 0,
                borderBottomWidth: StyleSheet.hairlineWidth,
              },
              // ios: {

              // }
            }),
          },
        }}>
        <Stack.Screen
          options={{headerTitleAlign: 'center', headerTitle: '首页'}}
          name="Home"
          component={Home}
        />
        <Stack.Screen
          options={{headerTitleAlign: 'center', headerTitle: '详情页'}}
          name="Detail"
          component={Detail}
        />
      </Stack.Navigator>
    </NavigationContainer>
  );
};

export default MyStackNavigation;

当中的注释会对路由的部分参数和注意事项做说明,特别是screenOptions这一块内容

4. 关于路由导航跳转传值的方式

主要使用的是@react-navigation/stack中StackNavigationProp模块以及@react-navigation/native中RouteProp配合使用;
我们假设Home页面传值100到Detail页面,以下是Home页面代码

import React, {FC} from 'react';
import {View, Text, Button} from 'react-native';
import {RootStackNavigation} from '@/navigator/index';

interface IProps {
  navigation: RootStackNavigation;
}

const Home: FC<IProps> = props => {
  const onPress = () => {
    const {navigation} = props;
    navigation.navigate('Detail', {
      id: 100,
    });
  };

  return (
    <View>
      <Text>Home</Text>
      <Button title="跳转到详情页" onPress={onPress} />
    </View>
  );
};

export default Home;

还是Detail页面代码:

import React, {FC} from 'react';
import {View, Text} from 'react-native';
import {RouteProp} from '@react-navigation/native';
import {RootStackParamList} from '@/navigator/index';

interface IProps {
  route: RouteProp<RootStackParamList, 'Detail'>;
}

const Detail: FC<IProps> = props => {
  const {route} = props;

  return (
    <View>
      <Text>Detail</Text>
      <Text>{route.params.id}</Text>
    </View>
  );
};

export default Detail;

未完待续!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ReactNative常用插件使用 的相关文章

  • 无法获取log.d或输出Robolectrict + gradle

    有没有人能够将 System out 或 Log d 跟踪从 robolectric 测试输出到 gradle 控制台 我在用Robolectric Gradle 测试插件 https github com robolectric robo
  • 自定义rc-time-picker的样式

    我在用rc time picker我的项目的包 但我在自定义样式时遇到问题pop up of my time picker成分 这是我的组件的屏幕截图 首先 我需要更改时间的背景颜色item在当时li from light grey 在屏幕
  • Android Activity 生命周期函数基础知识

    我正在测试这段代码 它显示活动所处的状态 public class Activity101Activity extends Activity String tag Lifecycle Called when the activity is
  • Adobe 是否为其 PDF 阅读器提供 Android SDK 或 API? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在我们的应用程序内的视图中显示本地 PDF 文件 在 Android 4 03 下的平板电脑上运行 目前 我们将 Adob eR
  • Android 中 Kotlin 协程的正确使用方式

    我正在尝试使用异步更新适配器内的列表 我可以看到有太多的样板 这是使用 Kotlin 协程的正确方法吗 这个可以进一步优化吗 fun loadListOfMediaInAsync async CommonPool try Long runn
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 带有 EditText 和 Spinner 的对话框

    我有一个按钮 单击后会弹出一个对话框 我希望对话框有一个EditText and a Spinner对话框内 我不知道如何设置它的视图 我有一个代码AlertDialog它有效 只是EditText and Spinner我需要将其放入其中
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 原色(有时)变得透明

    我正在使用最新的 SDK 版本 API 21 和支持库 21 0 2 进行开发 并且在尝试实施新的材料设计指南时遇到了麻烦 材料设计说我需要有我的primary color and my accent color并将它们应用到我的应用程序上
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • 在 ReactJS 中创建动态目录

    我有一个组件 它代表一个页面 其中有多个SectionHeader 组件作为该页面的子组件 我想通过检查 Page 的子项 SectionHeaders 来动态创建目录
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 代码镜像错误:未捕获错误:扩展集中无法识别扩展值([对象对象])

    全部 我目前正在从事一个React Electron项目 该项目的目标是完成一个Markdown编辑器 当我配置codemirror 该程序报告错误说 Uncaught Error Unrecognized extension value
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • Sentinel 熔断与限流

    文章目录 1 是什么 2 特征 3 特性 4 与Hystrix的区别 5 两个部分 6 应用 6 1 依赖 6 2 配置文件 7 流量配置规则 7 1 直接 默认 7 2 关联 7 3 Warm Up 预热 7 4 排队等待 8 熔断降级
  • 第一个Java程序,简单的打开图片并显示在面板上

    代码如下 1 import java awt Component 2 import java awt EventQueue 3 import java awt Graphics 4 import java awt event 5 impor
  • Linux (Ubuntu、CentOS) 如何 [禁用/启用] 图形界面

    Linux Ubuntu CentOS 如何 禁用 启用 图形界面 禁用图形界面本质就是调整 linux 的运行级别 runlevel PS 这里不讨论 GUI Desktop 的安装与卸载 一 什么是 Linux 运行级别 linux 操
  • Git删除本地修改

    git如何删除本地所有未提交的更改 git checkout git clean xdf 一般 git clean都是配合git reset 使用的 如果你有的修改已经加入了暂存区 那么 命令git reset hardgit clean
  • 事务(Transaction)

    事务 Transaction 事务 是数据库中的可以保证多个 至少2个 写操作 增 删 改 要么全部执行成功 要么全部执行失败的机制 在基于Spring JDBC的项目中 使用 Transactional注解 即可使得注解的方法是事务性的
  • 电脑加了内存条后,C盘空间突然被占用的解决办法!!!

    Hello everyone 我是鲁班 一个热衷于科研和软开的胖子 问题描述 WIN10电脑 自行加了8G内存条后 C盘空间显示减少了4G 解决方法 右键 此电脑 点击 属性 跳转至此界面 点击 高级系统设置 选择 高级 卡片 点击 性能
  • 备忘命令

    sudo vpnc connect
  • Python数据分析-绘图-2-Seaborn进阶绘图-3-分布图

    一 kdeplot 核密度估计用来估计未知的密度函数 是非参数检验之一 直观上来看是平滑后的直方图 核密度估计方法不利用有关数据分布的先验知识 对数据分布不附加任何假定 是一种从数据样本本身出发研究数据分布特征的方法 因而 在统计学理论和应
  • 节节高升 蓝桥杯模拟

    问题描述 小蓝要上一个楼梯 共 15 级台阶 小蓝每步可以上 1 级台阶 也可以上 2 级 3 级或 4 级 再多就没办法一步走到了 每级台阶上有一个数值 可能正也可能负 每次走到一级台阶上 小蓝的得分就加上这级台阶上的数 值 台阶上的数值
  • Java获得当前日期是星期几

    第一种方法 获取当前日期是星期几 br param date return 当前日期是星期几 public String getWeekOfDate Date date String weekDays 星期日 星期一 星期二 星期三 星期四
  • Antd Design Mobile tab去除下方蓝色边框和对tab里面的sticky布局的影响

    前言 最近在写手机端的项目 技术栈是 react Antd Desin Mobile 有个页面需要使用antd的组价tabs 然后遇到了tab下方有俩蓝色边框 一大一小 小的在上 大的在下 下方是表格 表格使用sticky布局 布局失效 百
  • Ubuntu19.04环境下的系统安装+花屏问题的解决

    说在前面 本文只做自我总结用 因为一次次重装环境到处找博客看帖实在是太麻烦了 而且网上的博客还良莠不齐 还有好多版本不兼容 本文中的某些图片是截图 某些是照片 在不能截图的情况下 图片比例可能会显示不正常 鼠标移到图片上单击放大查看就可以了
  • 区块链-技术简介

    1 什么是区块链 区块链技术是利用块链式数据结构来验证与存储数据 利用分布式节点共识算法来生成和更新数据 利用密码学的方式保证数据传输和访问的安全 利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式 简单
  • 复制CSDN的BLOG代码,去掉前面行号的方法

    我们如果从CSDN的BLOG复制代码 出现前面的行号 比如 1 文本没有缩写 2 Specify blanket rules for all elements 3 font size 12px 4 line height 160 5 fon
  • 关于java静态方法里只能调用静态变量的思考

    最近一段时间里面写了这样一个类 public class DBManager private static MySqliteHelper helper public static MySqliteHelper getHelper Conte
  • Geotools与OGC(二)----WKT坐标系信息的读取

    WKT除了有针对几何信息的描述外 也有针对空间参考的描述 以下我直接套用OGC规范中的描述 https www osgeo cn doc ogcstd ogc standard ch02 chapter1 chapter html wkb
  • 每天坐6小时以上,死亡率会增高——但站着工作就管用吗?

    此篇文章来自一篇科普类文章 作为IT行业人士 每天坐着的时间几乎都已超过了6小时 我们这些久坐的同仁儿们需要关注自己的健康 运动是我们健康的砝码哦 英文原文 Why I killed my standing desk 想必很多上班族都深受颈
  • 为什么老程序员的效率如此高?

    首先 优秀得神枪手一定是靠子弹喂出来得 没有几千上万个子弹得真枪实战 就很难在战场上一击枪杀敌人 我经常会看到一些新手程序员在写代码的时候需要频繁的去查看文档或者是百度搜索各种接口的用法 有时写一个功能要查个几十次 很多时间都浪费在了搜索上
  • upload-labs大详解

    pass1 上传一个php一句话文件 记得改成php格式 发现不允许上传php类型的 只能上传jpg gif pngl的我们打算用burp抓包 先上传jpg的 然后用burp改成php的 放包后 找到它的存储位置 用蚁剑连接 成功连接 pa
  • ReactNative常用插件使用

    项目版本介绍 目前使用的项目node版本v14 17 5 npm版本6 14 14 reactNative项目使用的模板结合typescript语法的项目模板架构 安装的方式如下 npx react native init xxx 项目名