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

React Navigation找不到navigation对象报错修复方案

问题原因
  • 报错Couldn't find a navigation object. Is your component inside NavigationContainer?的核心原因是:你在根组件App里调用了useNavigation(),但App组件本身是包裹NavigationContainer的父组件,不在导航上下文的作用范围内,无法拿到有效的navigation实例。
  • 报错Can't find variable: navigation的原因是:如果直接删掉const navigation = useNavigation();的声明,headerRight点击回调里引用的navigation变量没有任何定义,自然会触发变量未找到的错误。
修复方法

React Navigation的Stack.Screen的options属性支持函数传参形式,函数入参会自动携带当前页面可用的navigation、route对象,不需要额外调用hook获取,直接使用即可,具体修改步骤:

  1. 删除App组件中无效的const navigation = useNavigation();语句,同时可以删掉没用到的StackActions导入,减少无用代码。
  2. 将MAIN页面对应的Stack.Screen的options配置从对象形式改为函数形式,从入参中解构出navigation供跳转逻辑使用。

修正后的核心代码片段如下:

export default function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator initialRouteName='MAIN'>
        <Stack.Screen 
          name='MAIN' 
          component={MainScreen}
          // options改为函数形式,直接从入参拿navigation
          options={({ navigation }) => ({
            title:'',
            headerLeft:()=>
              <View>
                <Text style={{fontSize:25,marginLeft:30,marginTop:-5}}>성북구</Text>
              </View>,
            headerRight:()=>
              <TouchableOpacity onPress={() => navigation.navigate('DETAIL')}>
                <View>
                  <Image source={search} style={{height: 30, width: 30,marginRight:20}}/>
                </View>
              </TouchableOpacity>,
          })}
        />

        <Stack.Screen name="DETAIL" component={DetailScreen} 
          options={{
            title: '상세화면', 
            headerBackTitleVisible: false,
            headerBackImage: BackBtn,
            headerTitle:()=>(
            <View>
              <TextInput placeholder={'어떤 것을 찾고 계신가요?'} style={styles.input} autoFocus></TextInput>
            </View>
            )
        }}/>
      </Stack.Navigator>
    </NavigationContainer>
  );
}

补充说明:useNavigation hook仅能在被Stack.Screen注册、处于NavigationContainer包裹范围内的子组件中使用,包裹导航容器的根组件无法通过该hook获取导航实例。如果是在Screen的options配置项中需要使用导航能力,优先使用options函数入参自带的navigation对象,是兼容性最好、最符合官方设计的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:12:33