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

React Native 0.71.8如何导航至子文件夹内页面?

解决React Native Expo Router无法导航至深层子路由的问题

问题根源

你遇到的报错是因为Expo Router(React Native 0.71.8默认搭配的文件系统路由)的嵌套路由规则:带_layout.tsx的目录是独立路由组,movies/comedy属于movies路由组的子路由,不能直接在根Drawer导航器中注册。根导航器仅能管理到movies这一级,comedy的路由需由movies/_layout.tsx负责处理。

解决步骤

1. 修正根目录_layout.tsx的导航配置

移除直接注册(screens)/movies/comedy的代码,只保留到movies级别的路由:

import { Drawer } from 'expo-router/drawer';

export default function RootLayout() {
  return (
    <Drawer.Navigator>
      <Drawer.Screen name="(screens)/home" component={HomeScreen} />
      <Drawer.Screen name="(screens)/about" component={AboutScreen} />
      <Drawer.Screen name="(screens)/movies" component={MoviesScreen} />
    </Drawer.Navigator>
  );
}

2. 在movies/_layout.tsx中配置子路由

movies目录的_layout.tsx需要管理其下的子路由,这里以Stack.Navigator为例:

import { Stack } from 'expo-router';
import ComedyScreen from './comedy/_layout'; // 若comedy是单独页面,需导入对应组件

export default function MoviesLayout() {
  return (
    <Stack.Navigator>
      {/* 对应movies主页面 */}
      <Stack.Screen name="_layout" options={{ title: '电影专区' }} />
      {/* 注册comedy子路由 */}
      <Stack.Screen name="comedy" component={ComedyScreen} options={{ title: '喜剧电影' }} />
    </Stack.Navigator>
  );
}

3. 正确跳转至comedy页面

从其他页面跳转时,需使用嵌套导航的语法:

// 示例:在HomeScreen中添加跳转按钮
<Button
  title="查看喜剧电影"
  onPress={() => {
    navigation.navigate('(screens)/movies', { screen: 'comedy' });
    // 可简化为:navigation.navigate('movies', { screen: 'comedy' })
  }}
/>

4. 可选:优化comedy的文件结构

如果comedy只是单独页面而非路由组,建议将movies/comedy/_layout.tsx重命名为movies/comedy.tsx,这更符合Expo Router的文件路由规范,避免混淆布局文件与页面文件。

额外说明

  • Expo Router中,(screens)是路由组文件夹,导航时可省略前缀,直接使用home、movies等名称。
  • 每个_layout.tsx是对应目录的路由容器,负责管理该目录下所有子路由的导航逻辑与布局样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:57:46