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

Expo Router调用router.replace时iOS端Expo-Go闪退求助

问题:iOS端Expo-Go调用router.replace('/profile')闪退,Android运行正常

场景说明

完成认证流程后,从verify页面导航至profile页面,Android端运行无异常,但iOS端的Expo-Go会直接闪退。

核心代码

const verify = async ()=>{
  .....
  if (completeSignUp.status === "complete") {
        await setActive({ session: completeSignUp.createdSessionId });
        setState((s) => ({ ...s, loading: false, error_msg: "", code: "" }));
        router.replace("/profile"); // 触发iOS闪退的代码
      } else {
        setState((s) => ({
          ...s,
          loading: false,
          error_msg: "Failed to verify your email.",
          code: "",
        }));
      }
}

项目路由结构

app
   - _layout.tsx
   - verify.tsx
   - profile.tsx

使用依赖版本

"expo-router": "~3.5.20",
"expo": "~51.0.24",

可能的原因分析

  • 异步操作时序冲突:setActive是异步操作,虽然加了await,但React的setState也是异步更新状态的,可能状态还没更新完成就执行了路由跳转,iOS端对状态一致性要求更严格,从而引发崩溃。可以尝试把路由跳转放到setState的回调里,或者用useEffect监听loading或error_msg的变化,再执行跳转。
  • Expo-Router版本兼容Bug:当前使用的expo-router 3.5.20和expo 51.x组合,可能存在iOS端特有的路由跳转bug,比如内存泄漏、路由栈同步异常等。可以尝试升级expo-router到最新兼容版本,或者降级到更稳定的版本测试。
  • Profile页面iOS专属错误:闪退的根源可能不在跳转逻辑,而是进入profile页面后,页面内的代码在iOS环境下触发了崩溃——比如使用了Android专属API、iOS权限未配置、组件渲染时出现未处理的异常等。可以先把profile页面改成空页面测试,如果不再闪退,再逐步排查页面内的代码。
  • Expo-Go缓存问题:iOS的Expo-Go可能缓存了旧的代码或路由配置,导致跳转时出现冲突。可以尝试清除Expo-Go的缓存(在APP设置里清除),或者卸载重装Expo-Go后重新加载项目。
  • Session状态未同步完成:setActive设置会话后,iOS端可能还没完成会话的持久化,就跳转到profile页面,导致profile页面获取会话时出现异常,引发崩溃。可以在setActive后加个短暂的延迟(仅用于排查),或者确保profile页面能处理会话未就绪的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:27:21