在 vue3 中优雅的使用 jsx 声明、使用具名插槽、作用域插槽

最近手撸 vue3,出于好奇打算玩一手 JSX,在声明和使用插槽时遇到了一些挫折。
由于 JSX 语法不太熟,就拿 element-plus 的 menu 组件来举个例子、

template 写法

<el-menu router active-text-color="#ffd04b" background-color="#545c64">
 <el-sub-menu v-for="route in asyncRoutes" :key="route.name" :index="route.path">
  <template #title>
   {{ route.meta.title }}
  </template>
  <el-menu-item>{{ route.meta.title }}</el-menu-item>
 </el-sub-menu>
</el-menu>

jsx 写法

render() {
    if (!this.route.hide) {
      if (this.route?.children?.length > 0) {
        return (
          <>
            <el-sub-menu
              index={this.route.path}
              v-slots={{ title: () => <span>{this.route.meta.title}</span> }}
            >
              {this.route.children.map((item: AppRouteModule) => {
                return (
                  <el-menu-item index={item.path}>
                    {item.meta.title}
                  </el-menu-item>
                );
              })}
            </el-sub-menu>
          </>
        );
      }
    }
  },

以上是如何使用具名插槽,如果是作用域插槽在 v-slots 中的回调中可携带入参 scope
下面会结合 JSX 声明的语法来演示作用域插槽,普通语法就不多赘述了。

JSX 声明具名插槽(不带参)、作用域插槽(带参)

setup() {
 return {
 	value: {
		msg: '这是子组件的插槽内容'
	}
 }
},
render() {
	return (
		<>
			<p>这是子组件</p>
			{ this.$slots.content?.(this.value) }
		</>
	)
}

基于 vue3 的微信公众号 H5 项目

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Only Double J

自学不易,希望鼓励。

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

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

打赏作者

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

抵扣说明:

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

余额充值