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

使用嵌套导航器时route.params处理是否正确及重复弹窗问题求解

问题根源

React Navigation的路由参数会持久化保存在对应路由的实例上,你的错误操作本质是参数修改的目标对象错误:

  • 第一次从FinishingScreen跳转到Home时,你给Home路由设置了didComeFromFinishingScreen: true,只要Home路由没有被销毁,这个参数会一直保留
  • 从Home跳转到Drawer内页面时传递的didComeFromFinishingScreen: false是传给目标页面(比如ProfileStackScreen)的,完全不会修改Home路由的参数
  • 从Drawer页面点击跳转回Home时,如果目标路由名称和已有的Home路由实例名称不匹配,也无法覆盖原有参数

解决方案

最简单的修复方式是在模态框触发后立刻重置当前Home路由的对应参数,避免参数持久化导致重复触发:
修改HomeScreen的校验逻辑如下:

if(route.params?.didComeFromFinishingScreen && isFocused){
  setModalVisible(true)
  // 弹出模态框后立刻重置参数,下次进入不会重复触发
  navigation.setParams({
    didComeFromFinishingScreen: false
  })
}

可选优化方案

如果要进一步避免参数残留问题,可以把触发逻辑放到focus监听事件里,每次页面聚焦时做一次判断,判断后直接清空参数:

useEffect(() => {
  const unsubscribe = navigation.addListener('focus', () => {
    if(route.params?.didComeFromFinishingScreen){
      setModalVisible(true)
      navigation.setParams({ didComeFromFinishingScreen: false })
    }
  })
  return unsubscribe
}, [navigation, route.params])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:36:07