React Navigation 6中替代navigation.dangerouslyGetParent().state的写法
关键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
相关产品推荐
相关产品推荐

