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

React Native Expo项目中出现未使用默认导出错误的原因?

React Navigation 安装后白屏及导出提示问题

问题现象

  • 模拟器显示空白白屏
  • Web端口显示空白白屏
  • App.js出现"未使用默认导出"的提示

已尝试的排查步骤

  • 卸载所有React Navigation依赖
  • 重新安装所有React Navigation依赖

相关代码文件

App.js

import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import StackNavigator from './Components/StackNavigator';

export default function App() {

    return (
        <NavigationContainer>
            <StackNavigator />
        </NavigationContainer>
    );
}

StackNavigator.js

import React from 'react';
import 'react-native-gesture-handler';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { createDrawerNavigator } from '@react-navigation/drawer';
import HomeScreen from './HomeScreen';
import ResumeScreen from './ResumeScreen';

const StackNavigator = () => {

    const Stack = createNativeStackNavigator();
    const Drawer = createDrawerNavigator();

    return (
        <Drawer.Navigator>
            <Stack.Navigator>
                <Stack.Screen
                    name="Home"
                    component={HomeScreen}
                />
                <Stack.Screen
                    name="Resume"
                    component={ResumeScreen}
                />
            </Stack.Navigator>
        </Drawer.Navigator>
    );
};

export default StackNavigator;

package.json

{
  "name": "portfolio",
  "version": "1.0.0",
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web"
  },
  "dependencies": {
    "@expo/webpack-config": "^0.17.2",
    "@react-native-community/masked-view": "^0.1.11",
    "@react-navigation/drawer": "^6.5.6",
    "@react-navigation/native": "^6.1.1",
    "@react-navigation/native-stack": "^6.9.7",
    "expo": "~47.0.8",
    "expo-device": "~5.0.0",
    "expo-status-bar": "~1.4.2",
    "react": "18.1.0",
    "react-dom": "^18.1.0",
    "react-native": "0.70.5",
    "react-native-gesture-handler": "~2.8.0",
    "react-native-reanimated": "~2.12.0",
    "react-native-safe-area-context": "4.4.1",
    "react-native-screens": "~3.18.0",
    "react-native-svg": "13.4.0",
    "react-native-web": "^0.18.10"
  },
  "devDependencies": {
    "@babel/core": "^7.12.9"
  },
  "private": true
}

解决方案

1. 修复导航嵌套错误

当前StackNavigator.js的导航嵌套逻辑错误:Drawer.Navigator的子元素必须是Drawer.Screen,不能直接嵌套Stack.Navigator。以下是两种正确的嵌套方式:

方式一:将Stack作为Drawer的单个屏幕内容

import React from 'react';
import 'react-native-gesture-handler';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { createDrawerNavigator } from '@react-navigation/drawer';
import HomeScreen from './HomeScreen';
import ResumeScreen from './ResumeScreen';

const StackNavigator = () => {
    const Stack = createNativeStackNavigator();
    const Drawer = createDrawerNavigator();

    // 定义Stack导航
    const HomeStack = () => (
        <Stack.Navigator>
            <Stack.Screen name="Home" component={HomeScreen} />
            <Stack.Screen name="Resume" component={ResumeScreen} />
        </Stack.Navigator>
    );

    // 将Stack作为Drawer的一个屏幕
    return (
        <Drawer.Navigator>
            <Drawer.Screen 
                name="HomeStack" 
                component={HomeStack} 
                options={{ title: '主页' }} 
            />
            // 可添加其他Drawer屏幕
        </Drawer.Navigator>
    );
};

export default StackNavigator;

方式二:直接使用Stack导航(若不需要Drawer)

const StackNavigator = () => {
    const Stack = createNativeStackNavigator();

    return (
        <Stack.Navigator>
            <Stack.Screen name="Home" component={HomeScreen} />
            <Stack.Screen name="Resume" component={ResumeScreen} />
        </Stack.Navigator>
    );
};

2. 调整Gesture Handler导入位置

react-native-gesture-handler必须在项目入口的最顶部导入,将其移至App.js第一行:

import 'react-native-gesture-handler';
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import StackNavigator from './Components/StackNavigator';

export default function App() {
    return (
        <NavigationContainer>
            <StackNavigator />
        </NavigationContainer>
    );
}

3. 处理"未使用默认导出"提示

该提示多为编辑器/ESLint误报,可通过以下方式解决:

  • 重启编辑器或ESLint服务,清除缓存
  • 确认App.js的默认导出已被Expo入口正确加载(无需额外修改代码)

4. 清除缓存并重启项目

执行命令清除Expo缓存后重新启动:

expo start -c

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:05:25