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

React使用useNavigate触发invalid hook call错误的问题咨询

报错根因

  • useNavigate 是 React Hook,必须在函数组件的顶层作用域内调用,你当前把const navigate = useNavigate()写在了ProductCard组件定义的外部,不符合Hook的调用规则,因此触发非法Hook调用报错。
  • 额外注意:你当前组件入参的{ props,product, ...rest }写法存在冗余,组件的第一个参数本身就是完整的props对象,不需要单独解构出props字段,属于无效写法。

修正后代码

import { useNavigate } from 'react-router-dom';

const ProductCard = ({ product, ...rest }) => {
  // 将useNavigate调用移到组件内部顶层
  const navigate = useNavigate();

  return (
    <Card
      sx={{
        display: 'flex',
        flexDirection: 'column',
        height: '100%'
      }}
      {...rest}
    >
      <CardActionArea onClick={() => navigate(`/app/service/${product.serviceID}`)}>
        <CardContent> ...
        {/* 剩余原有代码保持不变即可 */}
  )
}

补充说明

  • 路径前添加/表示使用绝对路径跳转,避免相对路径匹配错误的问题,可根据你的实际路由规则调整。
  • 跳转后在目标页面组件内调用useParams()即可读取到传递的serviceID值,需要提前在路由配置中对应该路径添加参数占位符,示例配置:{ path: '/app/service/:serviceID', element: <TargetPage /> }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:00:05