You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo驱动React Native应用公共变量存储方案及报错解决

在Expo React Native中存储公共变量的正确方式及你的代码问题分析

首先,咱们先解决你遇到的「undefined is not an object」错误——问题出在导入方式和导出方式不匹配上:

你的Vars.js用的是export default导出一个对象,但在AppNavigator.js里你用了import * as Vars来导入。这种导入方式会把所有命名导出的内容打包成一个对象,而默认导出的内容会被放在这个对象的default属性里。也就是说你现在要访问的话得写Vars.default.colors.primary,这显然不是你想要的。

修复你的现有代码

只需要把导入语句改成默认导入就行:

// AppNavigator.js
import Vars from 'app/vars/Vars';

这样就能正常访问Vars.colors.primary了。


Expo React Native中存储公共变量的首选方式

根据场景不同,有几种常用方案:

1. 基础常量文件(最适合你的场景)

这是最直接简单的方式,适合存储颜色、字体、尺寸这类静态常量,就像你现在尝试的一样,但可以优化写法让结构更清晰:

// app/vars/constants.js
export const COLORS = {
  white: '#FFFFFF',
  black: '#000000',
  primary: '#0b457e',
  tabIconDefault: '#000000',
  tabIconSelected: '#0b457e'
};

export const FONTS = {
  normal: 'OpenSans-Regular',
  bold: 'OpenSans-Bold'
};

export const DIMENSIONS = {
  radius: 5,
  iconSize: 24
};

导入的时候可以按需导入,更灵活:

import { COLORS, DIMENSIONS } from 'app/vars/constants';

// 使用示例
backgroundColor: COLORS.white,
iconSize: DIMENSIONS.iconSize

2. 使用React Context(适合需要全局状态的场景)

如果你的变量需要在应用运行中动态改变,或者需要跨多层组件传递,React Context会更合适。比如主题切换(亮色/暗色模式):

// app/context/ThemeContext.js
import React, { createContext, useContext, useState } from 'react';

const ThemeContext = createContext();

export const ThemeProvider = ({ children }) => {
  const [theme, setTheme] = useState({
    colors: {
      primary: '#0b457e',
      white: '#FFFFFF'
    }
  });

  return (
    <ThemeContext.Provider value={{ theme, setTheme }}>
      {children}
    </ThemeContext.Provider>
  );
};

export const useTheme = () => useContext(ThemeContext);

然后在App.js里包裹Provider,组件里用useTheme钩子访问:

// 组件中使用
const { theme } = useTheme();
console.log(theme.colors.primary);

3. 使用环境变量(敏感配置)

如果是API地址、密钥这类敏感或环境相关的变量,可以用Expo的环境变量支持。在项目根目录创建.env文件:

API_URL=https://your-api.com
API_KEY=your-secret-key

然后用expo-constants来读取:

import Constants from 'expo-constants';

const apiUrl = Constants.expoConfig.extra.apiUrl;

总结一下,如果你只是存储静态的样式常量,第一种基础常量文件的方式是首选,简单高效;如果需要动态全局状态,就用Context;敏感配置用环境变量。

内容的提问来源于stack exchange,提问作者Joel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:59:15