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

React Navigation类组件导航报错:无效Hook调用问题咨询

React Navigation 导航Hook调用错误解决方案

错误原因

这个错误是因为违反了React Hook的核心规则:所有Hook必须在函数组件的顶层作用域调用,不能在事件回调、条件判断、循环或普通函数内部调用useNavigation这类Hook。

可行解决方案

1. 函数组件中正确使用Hook

将useNavigation放在函数组件的顶层,在事件回调中直接使用获取到的navigation对象:

import { useNavigation } from '@react-navigation/native';
import { Image } from 'react-native';

const HomeScreen = () => {
  // 必须在组件顶层调用Hook
  const navigation = useNavigation();

  const goToDetail = () => {
    // 在回调中使用navigation跳转
    navigation.navigate('DetailScreen');
  };

  return (
    <Image
      source={require('../assets/your-image.png')}
      onPress={goToDetail}
      style={{ width: 100, height: 100 }}
    />
  );
};

export default HomeScreen;

2. 类组件中使用导航(兼容方案)

如果你的组件是类组件,用withNavigation高阶组件包裹,通过props获取导航对象:

import React from 'react';
import { Image } from 'react-native';
import { withNavigation } from '@react-navigation/compat';

class HomeScreen extends React.Component {
  goToDetail = () => {
    this.props.navigation.navigate('DetailScreen');
  };

  render() {
    return (
      <Image
        source={require('../assets/your-image.png')}
        onPress={this.goToDetail}
        style={{ width: 100, height: 100 }}
      />
    );
  }
}

// 用高阶组件包裹后,组件会接收navigation props
export default withNavigation(HomeScreen);

3. 额外排查点

  • 确认你的React版本≥16.8.0(Hook的最低支持版本)
  • 检查项目中是否存在重复安装的React包(可通过npm ls react查看,确保只有根目录下的一个版本)
  • 不要在自定义的普通工具函数中调用useNavigation,如果需要复用导航逻辑,封装成自定义Hook(必须在函数组件顶层调用)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:31:20