欢迎来到科站长!

JavaScript

当前位置: 主页 > 网络编程 > JavaScript

vue3如何解决slot深层透传问题

时间:2025-07-25 10:01:18|栏目:JavaScript|点击:

vue3解决slot深层透传问题

问题

组件嵌套导致的层级过深,slot难以传入到指定组件,一层层传又低效,并且增加维护成本。

解决方式

利用 provide 和 inject 及 h() 函数 以及 vnode 实现slot透传

父容器中定义了插槽后,通过 provide 往后传输 slot 的虚拟 DOM 节点 (vnode):

slot组件中使用 inject 接收到父容器传输的slots后,通过渲染函数 h() 渲染虚拟 DOM 节点 (vnode),从而实现slot在任意深层组件使用:

使用方式

任意的深层组件引用slot组件并获取需要的slot DOM进行渲染即可

  • 父容器代码:
<template>
  <div>
    <!--父容器中使用插槽-->
    <template v-slot:test="{ arg }">
      <span>
        {{ arg.code }}
      </span>
    </template>
  </div>
</template>

<script>
import { provide, defineComponent } from 'vue';
export default defineComponent({
  name: 'box',
  setup(ctx: any) {
    provide('tableSlots', ctx.slots);
    return {};
  }
});
</script>
  • slot组件代码:
<script>
import { defineComponent, h, inject } from 'vue';

export default defineComponent({
  name: 'testSlots',
  props: ['prop1', 'prop2'],
  setup(props: any, ctx: any) {
    return {
      props,
      ctx
    };
  },
  render(getup: any) {
    const { props } = getup;
    const template = (inject('testSlots') as any)?.['test'];
    return h(template, props);
  }
});
</script>


上一篇:Vscode如何创建vue项目

栏    目:JavaScript

下一篇:Vue3中Slot插槽透传,二次封装Arco的table组件详解

本文标题:vue3如何解决slot深层透传问题

本文地址:https://fushidao.cc/wangluobiancheng/23783.html

广告投放 | 联系我们 | 版权申明

申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:257218569 | 邮箱:257218569@qq.com

Copyright © 2018-2025 科站长 版权所有冀ICP备14023439号