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

React Navigation 6中替代navigation.dangerouslyGetParent().state的写法

React Navigation v4 升级到 v6:父路由状态获取及代码适配

关键API变化适配

  • 用navigation.getParent()替代navigation.dangerouslyGetParent(),通过getParent().getState()获取父导航器的状态(v6中不再直接暴露.state属性,需调用getState()方法)
  • StackActions.replace的配置参数中,routeName改为name(v6的标准API命名)
  • 新增父导航器不存在的边界判断(避免当前页面为根导航器时抛出错误)

改写后的完整代码

const { navigation } = this.props;
const { navBack } = this.state;
this.hideToast();

if (navBack) {
  // 获取父导航器实例
  const parentNav = navigation.getParent();
  
  // 处理无父导航器的边界情况
  if (!parentNav) {
    navigation.navigate(navBack);
    return true;
  }
  
  // 获取父导航器的状态(对应原代码的parentRoute)
  const parentState = parentNav.getState();
  const backRoute = getBackRouteName(
    parentState,
    parentState.index - 1
  );

  if (backRoute === null) {
    navigation.navigate(navBack);
  } else {
    const replaceAction = StackActions.replace({
      key: backRoute.key,
      name: navBack, // v6 替换routeName为name
      params: {
        navBack,
      },
    });
    navigation.dispatch(replaceAction);
    navigation.goBack();
  }
} else {
  navigation.goBack();
}

return true;

额外说明

  • 若getBackRouteName函数仅依赖状态中的routes数组和index属性,无需修改该函数(v6导航器状态的核心结构与v4一致)
  • 如果父导航器类型不是栈导航器,需根据实际导航器的状态结构调整getBackRouteName的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:54:21