在vue3的渲染函数中使用自定义组件

起因是这样的:
我要在导航菜单中使用element-plus的图标,图标是通过router来配置的:

      {
        path: 'index',
        name: 'log',
        component: () => import('@/views/log/index'),
        meta: { title: '备份日志', icon: 'document', perm: 'logs' }
      }

生成菜单的时候,需要根据icon的值来生成图标。按照element-plus的一般使用方法,图标名称是作为标签来使用的,所以需要用渲染函数来生成图标的标签。

<script lang="jsx">
import { h, resolveComponent } from 'vue'

const MenuIcon = {
  name: 'MenuIcon',
  props: {
    icon: {
      type: String,
      default: ''
    }
  },
  render(props) {
    return <el-icon>
       {h(resolveComponent(icon))}
    </el-icon>
  }
}

export default {
  components: { MenuIcon },
  ...
}

这儿主要有两点:

  1. h的第一个参数,其实除了字符串外,还可以是一个组件、一个异步组件、或 一个函数式组件
  2. 要使用vue的resolveComponent方法。
    使用时,就可以如下:
<menu-icon :icon="item.meta && item.meta.icon" />
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容