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

在Next.js中传递函数型Prop时,如何使用twin.macro?

问题解决:Icon未定义报错及twin.macro样式不生效问题

先解决最直接的语法错误

你的Sidebar.tsx代码里,<Icon tw={'h-6 w-6'} />后面多了一个英文句号(.),这会导致JSX语法解析失败,编译器无法正确识别Icon组件,这是触发“Icon is not defined”报错的直接原因,先把这个句号删掉。

处理twin.macro给自定义Icon组件加样式的问题

你的Icon是接收SVGProps的函数组件,twin.macro的tw属性默认只对原生HTML元素生效,直接给自定义组件传tw属性不会起作用,你可以用以下两种方案解决:

方案一:用twin.macro直接包装传入的Icon组件

import React from 'react';
import { Props } from './SidebarRow.i';
import tw from 'twin.macro';

function SidebarRow({ Icon, title }: Props) {
  // 用tw函数动态包装传入的Icon组件,添加样式
  const StyledIcon = tw(Icon)`h-6 w-6`;
  return (
    <div>
      <StyledIcon />
      <p>{title}</p>
    </div>
  );
}

export default SidebarRow;

方案二:通过style属性传递样式

因为Icon接收SVGProps,其中包含style属性,直接把twin生成的样式传给style即可:

import React from 'react';
import { Props } from './SidebarRow.i';
import tw from 'twin.macro';

function SidebarRow({ Icon, title }: Props) {
  return (
    <div>
      <Icon style={tw`h-6 w-6`} />
      <p>{title}</p>
    </div>
  );
}

export default SidebarRow;

关于接口的说明

你定义的Props接口是完全正确的,不需要做任何特殊处理,它已经准确描述了Icon组件的类型(接收SVGProps的函数组件)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:27:30