vue3如何解决slot深层透传问题
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>栏 目:JavaScript
下一篇:Vue3中Slot插槽透传,二次封装Arco的table组件详解
本文标题:vue3如何解决slot深层透传问题
本文地址:https://fushidao.cc/wangluobiancheng/23783.html
您可能感兴趣的文章
- 02-04javascript解码揭秘,JavaScript核心原理及高效编码技巧之谜?
- 02-04javascript电子书涵盖哪些编程技巧与实战案例,适合哪些开发者阅读?
- 02-04JavaScript如何高效操作javascript二维数组的元素和方法选择?
- 02-04JavaScript全局变量如何影响代码的模块化和性能优化?
- 02-04javascript赋值
- 02-04a标签javascript如何正确运用和优化?探讨技巧与最佳实践疑问长尾标题
- 02-04javascript设计
- 02-04JavaScript翻译中的常见难点和高效策略探讨?
- 02-04javascript变量名
- 02-04JavaScript隐藏技巧,揭秘30种不为人知的隐藏方法之谜?
阅读排行
推荐教程
- 02-01如何选择最适合你的JavaScript视频教程?
- 04-23JavaScript Array实例方法flat的实现
- 04-23Vue3使用v-if指令进行条件渲染的实例代码
- 04-23THREE.JS使用TransformControls对模型拖拽的代码实例
- 07-21JavaScript判断数据类型的四种方式总结
- 07-21基于vue3与supabase系统认证机制详解
- 07-22JavaScript随机数生成各种技巧及实例代码
- 07-21JavaScript检查变量类型的常用方法
- 04-23vue3+ts项目搭建的实现示例
- 07-21JavaScript双问号操作符(??)的惊人用法总结大全


