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
相关产品推荐
相关产品推荐

