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

Next.js+TypeScript自定义Link组件报错:href属性为undefined

问题解决:Link组件href传入undefined的错误

问题根源

你定义NavLink组件时参数结构错误:React函数组件的唯一参数是包含所有属性(包括children)的props对象,而你写成了(children, props),这会导致第二个参数props实际为undefined,自然props.href取不到传入的值,传给<Link>时就变成了undefined,触发类型错误。

解决方案

修正组件的参数结构,正确接收props对象:

修正后的NavLink组件代码

import React from 'react';
import Link from 'next/link'; // 按实际使用的Link组件调整

const NavLink: React.FC<{
  activeClassName: string;
  className: string;
  href: string;
  clickEvent?: React.MouseEventHandler;
  onClick?: React.MouseEventHandler;
  title: string;
}> = ({ children, ...props }) => {
  // 可在此添加active状态判断等自定义逻辑
  return (
    <Link href={props.href} onClick={props.clickEvent} passHref>
      <a 
        className={`${props.className} ${/* 根据active状态拼接activeClassName */}`} 
        title={props.title}
      >
        {children}
      </a>
    </Link>
  );
};

若无需解构children,也可直接使用props对象:

const NavLink: React.FC<{
  activeClassName: string;
  className: string;
  href: string;
  clickEvent?: React.MouseEventHandler;
  onClick?: React.MouseEventHandler;
  title: string;
}> = (props) => {
  return (
    <Link href={props.href} onClick={props.clickEvent} passHref>
      <a className={props.className} title={props.title}>
        {props.children}
      </a>
    </Link>
  );
};

关键说明

  • React函数组件仅接收一个参数:包含所有传入属性的props对象,href、className、children等都在该对象内。
  • 修正参数结构后,props.href就能正确获取到调用时传入的'/',不再是undefined,符合<Link>组件对href属性的类型要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:50:33