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

React Native自定义Footer组件navigation.navigate调用报错如何解决

错误原因

只有被Stack.Screen直接注册为路由组件的页面(比如你的HomeScreen),才会自动被React Navigation注入navigation属性。你自己封装的FooterSB是在HomeScreen内部引入的自定义子组件,默认拿不到navigation属性,所以调用navigation.navigate的时候才会提示它是undefined。

修复方案(二选一即可)

方案1:父组件透传navigation属性

直接在HomeScreen调用FooterSB的位置,把自身拿到的navigation当做属性传给子组件即可:
修改HomeScreen.js里的Footer渲染代码:

// 原来的代码
<FooterSB receiveValue={receiveValue}>
</FooterSB>

// 修改为
<FooterSB navigation={navigation} receiveValue={receiveValue} />

这个方案改动最小,适合新手快速解决问题。

方案2:使用useNavigation钩子主动获取导航实例

如果你很多页面都要复用Footer,每次透传navigation太麻烦,可以用React Navigation提供的内置钩子直接在Footer内部获取导航对象:
修改Footer.js的代码:

  1. 首先导入useNavigation钩子:
import { useNavigation } from '@react-navigation/native';
  1. 组件内部调用钩子拿到navigation,不需要再从props里接收:
// 原来的组件定义
const FooterSB = ({navigation}) => {

// 修改为
const FooterSB = ({receiveValue}) => {
  const navigation = useNavigation();

另外你Footer里现在导入的import {StackNavigation} from "./StackNavigation";没有任何作用,可以直接删掉。

两种方案任选一种即可解决导航失效的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:24:03