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

React Native Stack Navigator返回按钮跳转首页而非上一页问题求助

问题根因

你遇到的返回逻辑异常是React Navigation的navigate方法默认行为导致的:当你调用navigation.navigate(目标路由名)时,如果目标路由已经存在于当前导航栈中,框架会直接返回到栈中已有的该路由实例,并将该路由上方的所有页面从栈中销毁。
你按首页(Главная) -> 菜谱页(Рецепт) -> 账号页(Аккаунт)跳转后,栈结构为[Главная, Рецепт, Аккаунт],此时从Аккаунт调用navigate('Рецепт'),框架检测到Рецепт已经在栈中存在,就会直接回到已有的Рецепт实例,把上方的Аккаунt弹出栈,最终栈变为[Главная, Рецепт],因此点击返回按钮会直接回到首页。

解决方案

直接将跳转方法从navigate替换为push即可,push方法的逻辑是无论目标路由是否存在于栈中,都会新增一个目标路由实例压入栈顶,不会销毁已有页面。

修改后的跳转代码如下:

const handleRecipe = (_id) => {
    navigation.push('Рецепт', { _id })
}

修改后跳转的栈结构会变为[Главная, Рецепт, Аккаунт, Рецепт],此时点击Рецепт页面的返回按钮,就会正常回到上一级的Аккаунт页面。

其他注意事项
  • 你的导航栈配置中存在属性拼写错误,Рецепт和Аккаунт页面的配置项写的是option,正确的属性名是options,该错误会导致你配置的页面标题不生效,建议同步修正:
// 修正前
<HomePageStack.Screen name='Рецепт' component={Recipe} option={{ title: 'Рецепт' }} style={{ height: '100%' }} />
// 修正后
<HomePageStack.Screen name='Рецепт' component={Recipe} options={{ title: 'Рецепт' }} style={{ height: '100%' }} />
  • 如果业务中存在多次跳转至同一个路由的场景,可根据实际需求判断是否需要限制重复压入同一页面的次数,避免栈过深导致的内存占用过高问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:54:03