全局变量在 React Native 中不起作用 - Expo

Posted

技术标签:

【中文标题】全局变量在 React Native 中不起作用 - Expo【英文标题】:global variables not work in React Native - Expo 【发布时间】:2020-11-20 15:27:50 【问题描述】:

大家好,我尝试使用文件 .env 创建全局变量,但不起作用我使用 react native expo 我写了 process.env.API_URL 但没有找到这个变量。我要为工作做什么?

我绝望了

我读过https://www.npmjs.com/package/react-native-dotenv 和https://docs.expo.io/guides/environment-variables/,但对我不起作用。 我需要帮助!!!

【问题讨论】:

【参考方案1】:

我在让环境变量工作时遇到了很多问题。奇怪的是,最强烈推荐的包是react-native-dotenv,而index.js 中的第一行代码是require('fs'),这是一个在React Native 中不可用的Node 模块。

无论如何,我最终创建了一个新的上下文来处理环境变量。我没有根据环境自动导入变量的逻辑,但这就像注释掉一行一样简单。

使用您的变量创建一个 JSON 文件,将其导入您的上下文中,并将其放在您的 app.js 返回顶部,从而允许您应用中的所有内容使用它。从那里,使用 useContext() 导入它,就像在任何其他上下文中一样,您可以访问所有变量。

编辑:在反复出现问题后,我决定只使用生产变量进行应用测试。这一点都不理想,但我敢肯定,很多人都处于与我相同的位置,变量中唯一真正的区别是 API 的路由名称(本地测试服务器与生产服务器)。不幸的是,iosandroid 都不支持 http 请求,或带有自签名证书的 https 请求,无需编辑配置文件。如果您使用 Expo 托管流程,则这些配置文件不可用。因此,我唯一的选择是简单地对生产 API 进行测试。幸运的是,我有很好的日志可供参考,而且 API 本身相当成熟,并且已经通过 Web React 应用程序进行了大量测试。

如果有人有更好的解决方案,我很想听听。

【讨论】:

嗨! react-native-dotenv 的维护者在这里。 require('fs') 之所以有效,是因为它不是 react-native-library;这是一个 babel 插件。让我知道它是否适合您。【参考方案2】:

https://docs.expo.io/guides/environment-variables/#the-app-manifest-env

如果您已在托管中安装了 expo-constants 模块 工作流项目,您可以访问应用程序清单的属性。之一 这些属性是 .env 属性,该属性仅 运行 expo start 时可用。顾名思义,它包含 一些系统定义的环境变量。为了安全 原因,只有以REACT_NATIVE_EXPO_ 开头的变量 可用

如果您希望 API url 可用,则需要以 REACT_NATIVE_EXPO_ 为前缀

定义

REACT_NATIVE_API_URL=....

EXPO_API_URL=....

访问途径

process.env.REACT_NATIVE_API_URL

process.env.EXPO_API_URL

编辑

如果使用react-native-dotenv 模块

Usage

将您的 env 键值对添加到您的 .env 文件中

API_URL=....

现在将其导入您的 .js 文件中

import  API_URL  from 'react-native-dotenv';

【讨论】:

只有在我使用 expo-constant 时才有效。我不使用这个。

以上是关于全局变量在 React Native 中不起作用 - Expo的主要内容,如果未能解决你的问题,请参考以下文章

PushNotificationIOS.presentLocalNotification() 在 react-native 中不起作用

setParams 在 react-native 中不起作用

Gif 在 React Native iOS 中不起作用

重复本地通知在 react-native-push-notification 中不起作用

Animated.View 在 React Native 中不起作用

React-Native 多部分照片上传在 android 中不起作用