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

能否通过Props传递组件?以Hero Icon组件传递为例

可以通过Props传递组件,具体实现分框架说明

当然可以把插槽内容改成Props传递,Hero Icon这类组件本质就是框架的组件对象/函数,直接作为Props传递即可,下面分Vue和React两种常用场景给出实现:

Vue 3 实现方式

1. 修改NavigationItem组件,接收组件类型的Props

<template>
  <div class="navigation-item">
    <!-- 使用Vue的动态组件渲染传入的图标组件 -->
    <component :is="icon" class="w-6" />
    <span>{{ label }}</span>
  </div>
</template>

<script setup>
import { defineProps } from 'vue'

const props = defineProps({
  // 图标组件,类型为Object(Vue单文件组件的导出类型)
  icon: {
    type: Object,
    required: true
  },
  // 导航文本
  label: {
    type: String,
    required: true
  }
})
</script>

2. 使用时直接传入图标组件

<template>
  <NavigationItem :icon="TicketIcon" label="Link One" />
</template>

<script setup>
// 导入需要的Hero Icon组件
import TicketIcon from '@heroicons/vue/24/outline/TicketIcon'
import NavigationItem from './NavigationItem.vue'
</script>

React 实现方式

1. 修改NavigationItem组件,接收组件类型的Props

function NavigationItem({ Icon, label }) {
  return (
    <div className="navigation-item">
      {/* 直接渲染传入的图标组件(React组件本质是函数,大写开头区分) */}
      <Icon className="w-6" />
      <span>{label}</span>
    </div>
  )
}

export default NavigationItem

2. 使用时直接传入图标组件

import TicketIcon from '@heroicons/react/24/outline/TicketIcon'
import NavigationItem from './NavigationItem'

function App() {
  return (
    <NavigationItem Icon={TicketIcon} label="Link One" />
  )
}

进阶:批量生成导航项

这种Props传递的方式特别适合批量生成导航,只需定义一个导航配置数组即可:

Vue示例

<template>
  <div class="navigation-list">
    <NavigationItem
      v-for="item in navItems"
      :key="item.label"
      :icon="item.icon"
      :label="item.label"
    />
  </div>
</template>

<script setup>
import TicketIcon from '@heroicons/vue/24/outline/TicketIcon'
import HomeIcon from '@heroicons/vue/24/outline/HomeIcon'
import NavigationItem from './NavigationItem.vue'

const navItems = [
  { icon: HomeIcon, label: '首页' },
  { icon: TicketIcon, label: 'Link One' }
]
</script>

React示例

import TicketIcon from '@heroicons/react/24/outline/TicketIcon'
import HomeIcon from '@heroicons/react/24/outline/HomeIcon'
import NavigationItem from './NavigationItem'

function App() {
  const navItems = [
    { Icon: HomeIcon, label: '首页' },
    { Icon: TicketIcon, label: 'Link One' }
  ]

  return (
    <div className="navigation-list">
      {navItems.map(item => (
        <NavigationItem key={item.label} {...item} />
      ))}
    </div>
  )
}

如果需要给图标传递额外属性(比如颜色、尺寸),可以在NavigationItem组件中添加对应的Props透传,比如Vue中用v-bind,React中直接传递属性给图标组件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:35:33