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

Expo Router适配Web端导航(返回、刷新、前进)问题求助

Expo Router适配Web端导航(返回、刷新、前进)问题求助

嘿,我看了你遇到的Expo Router在Web端处理导航(返回、刷新、前进)时出现「Not Found」的问题,刚好之前做类似项目踩过同款坑,给你几个针对性的建议,你可以挨个试试:

1. 先搞定Firebase Hosting的重写规则

因为你用的是**静态输出(web.output: static)**部署到Firebase Hosting,单页应用的核心问题就是:刷新非根路径时,Firebase会默认去找对应路径的物理文件,但这些路由其实是Expo Router虚拟出来的,根本不存在,所以会返回404。

解决方法是在你的firebase/firebase.json里添加重写规则,把所有请求都转发到入口的index.html:

{
  "hosting": {
    "public": "app/dist", // 这里要和你Firebase部署的目录对应,看你的项目结构是app/dist
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

配置完之后重新部署Firebase Hosting,这一步大概率能解决刷新和前进后退的404问题。

2. 检查Expo Router的路由href配置

看你(tabs)/_layout.tsx里的Screen配置,href写的是/(tabs)/page,但Expo Router的**分组路由(带括号的目录)**是用于布局逻辑的,实际Web端的URL里不会包含括号。比如app/(tabs)/page.tsx对应的实际Web路由是/page,而不是/(tabs)/page。

你需要把Screen的href改成实际的路径:

<Tabs.Screen 
  name="page" 
  options={{ 
    href: "/page", // 去掉括号部分
    title: "Page" 
  }} 
/>
<Tabs.Screen 
  name="anotherPage" 
  options={{ 
    href: "/anotherPage", 
    title: "Another Page" 
  }} 
/>

如果href配置错误,Web端的URL就会和Expo Router的路由不匹配,自然会出现NotFound。

3. 验证静态构建的产物

先在本地跑一遍静态构建:

npx expo export:web

然后检查app/dist目录下是否生成了index.html和对应的静态资源(js、css文件)。如果构建产物有问题,部署后肯定会出问题。你可以用本地静态服务器(比如npx serve app/dist)测试,看看刷新页面会不会出现404,如果本地也有问题,那就是路由配置的问题,不是Firebase的问题。

4. 路由配置的小细节检查

  • 确保你的_layout.tsx里的unstable_settings配置的initialRouteName都是存在的页面,比如(tabs)布局里的initialRouteName: 'page',要确保page.tsx确实在(tabs)目录下。
  • 如果用的是较新版本的Expo Router,建议尽量避免用unstable_settings,改用更稳定的配置方式(比如在_root.tsx里设置初始路由),不过旧版本如果能用的话也没问题。

先从这几点入手排查,应该能解决你遇到的导航问题~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 08:49:50