vue3 优雅的在 jsx 中使用动态组件 component

想必用 vue 撸过后台的同学们都有经历过,侧边导航栏结合 vue-router 的无限层级渲染。
但是 vue3 所推崇的按需引入加上 element-plus 的 icon 组件变化。
使得我们在渲染的时候需要用到动态组件。

内置组件 component

在 jsx 中没有办法正常渲染,有成功的同学可以留下代码讨论下。

resolveComponent 与 h 结合使用

成功渲染,代码如下:

import { defineComponent, resolveComponent, h } from "vue";
import { HomeFilled, Lock } from "@element-plus/icons-vue";

export default defineComponent({
  name: "OverrideItem",
  components: {
    HomeFilled,
    Lock,
  },
  render(){
  	...
  	<el-icon size={14}>
     {this.route.meta?.icon &&
       h(resolveComponent(this.route.meta.icon))}
   	</el-icon>
    ...      
  }
})

简单总结下:

  1. jsx 中需要使用 resolveComponent 函数去访问组件,组件的name就是入参。
  2. 访问成功之后,再使用 h 渲染函数将其渲染出来。
  3. 需要注意,要渲染的组件必须在 components 中声明,否则一样无效。
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Only Double J

自学不易,希望鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值