React Native History.js点击商品跳转至Home.js而非详情页问题
问题原因及解决方案
这个问题是嵌套导航(通常是底部标签导航嵌套栈导航)场景下,调用了错误的导航实例导致的跳转逻辑执行到了其他栈内。
常见错误配置及修复方法
- 错误1:History页面不属于ProductStack的路由范围,你在History页面调用
navigation.navigate('ProductDetails')时,默认只会在当前页面所属的导航栈内查找路由,找不到就会向上查找最近的包含该路由的父栈,也就是Home页面所属的ProductStack,所以跳转逻辑在Home的栈内执行。
修复方案:如果ProductDetails是全局通用页面,直接将路由注册到最外层的导航栈中,或者跳转时指定目标路由所属的栈名,写法为:navigation.navigate('ProductStack', { screen: 'ProductDetails', params: { /* 商品参数 */ } }) - 错误2:History页面所在的栈没有注册ProductDetails路由
修复方案:在History所属的导航栈内也添加ProductDetails的路由配置,这样在History页面调用跳转时会优先在当前栈内打开页面。 - 错误3:导航实例引用错误,你可能在History页面误用了全局挂载的、属于Home栈的navigation对象,而不是当前History页面props传入的navigation
修复方案:确认History页面的navigation对象是通过props接收、或者useNavigation()钩子返回的当前页面所属导航实例,不要跨页面共享navigation对象。
内容的提问来源于stack exchange,提问作者Ibrahim Anam
相关产品推荐
相关产品推荐

