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

从Expo Router迁移至React Navigation遇路由fallback问题求助

迁移Expo Router到React Navigation时仍触发Expo Router的解决方法

问题背景

已从Expo Router文件路由迁移到React Navigation,移除了原app/文件夹并搭建了src/下的导航与屏幕结构,但运行应用时仍出现Expo Router的fallback默认页面,未加载自定义的React Navigation配置。

现有核心配置:

  • 新文件夹结构:
    src/
    ├── navigation/
    │   ├── DrawerNavigator.tsx
    │   ├── TabNavigator.tsx
    ├── screens/
    │   ├── drawer/HomeScreen.tsx
    │   ├── drawer/ModalScreen.tsx
    │   ├── tabs/TabOne.tsx
    │   ├── tabs/TabTwo.tsx
    │   ├── NotFoundScreen.tsx
    ├── App.tsx
    
  • 原DrawerNavigator.tsx已绑定NavigationContainer与Drawer导航,但未正确禁用Expo Router的自动启动机制。

解决步骤

1. 禁用Expo Router的自动配置

Expo默认自动启用Router功能,即使移除app/文件夹也会触发fallback页面。需在app.json或app.config.js中明确禁用:

{
  "expo": {
    "router": {
      "enabled": false
    },
    // 其他原有配置
  }
}

2. 确保App.tsx正确加载React Navigation

修改项目根目录下的App.tsx,直接引入自定义导航容器,替代默认的Expo Router入口:

import React from 'react';
import DrawerNavigator from './src/navigation/DrawerNavigator';

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

3. 修正导航结构匹配原Expo Router功能

原Expo Router的模态页为全局层级(非嵌套在Drawer中),同时需处理404页面。调整DrawerNavigator.tsx结构:

import React from 'react';
import { createDrawerNavigator } from '@react-navigation/drawer';
import { createStackNavigator } from '@react-navigation/stack';
import { NavigationContainer } from '@react-navigation/native';
import HomeScreen from '../screens/drawer/HomeScreen';
import TabNavigator from './TabNavigator';
import ModalScreen from '../screens/drawer/ModalScreen';
import NotFoundScreen from '../screens/NotFoundScreen';

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

// 嵌套Drawer与Tab导航
function MainDrawer() {
  return (
    <Drawer.Navigator initialRouteName="Home">
      <Drawer.Screen name="Home" component={HomeScreen} />
      <Drawer.Screen name="Tabs" component={TabNavigator} />
    </Drawer.Navigator>
  );
}

const DrawerNavigator = () => (
  <NavigationContainer>
    <Stack.Navigator screenOptions={{ headerShown: false }}>
      {/* 主导航栈 */}
      <Stack.Screen name="Main" component={MainDrawer} />
      {/* 全局模态页 */}
      <Stack.Screen 
        name="Modal" 
        component={ModalScreen} 
        options={{ presentation: 'modal' }} 
      />
      {/* 404页面 */}
      <Stack.Screen name="NotFound" component={NotFoundScreen} />
    </Stack.Navigator>
  </NavigationContainer>
);

export default DrawerNavigator;

4. 清除Expo缓存

运行以下命令清除旧配置缓存,确保新导航配置生效:

npx expo start --clear

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:26:14