如何透传vue的scopedSltos
发布网友
发布时间:2024-10-14 16:21
我来回答
共1个回答
热心网友
时间:2024-11-16 22:01
理解 Vue 的 scopedSlots 和 slot 概念需先阅读 Vue slot教程 。这两者都基于 Vue 实例,用于承载分发内容。
在 Vue 中,内部组件实例的$slots 和 $scopedSlots 会包含描述标签的对象,即使没有具名 slot,它们也会存在,key 通常为 "default"。
渲染机制自动将这些内容注入到对应模版中。
scopedSlots 特殊之处在于每个属性是一个生成 VNode 的 render 函数,而一般 slot 直接接收 VNode[] 进行渲染。
尽管设计可能统一两者,但这仍需未来实现。
获取 scopedSlots 和 slots 时,需注意初始化时对象为空,直到 mounted 生命周期后才能获取值,因此在传递时需考虑监听问题。
传递 slots 主要挑战是如何将 $scopedSlots 和 $slots 对下层 component 进行传递。
模板方法传递过于繁琐,通常不推荐。
在中间过程,直接在 VNode 配置阶段传递给 render 函数的 scopedSlots,但 slots 不支持此操作。
在使用 JSX 时,可通过挂载对象方式传递 scopedSlots。
然而,仍需多级传递,子组件在需要使用时通过插槽渲染,或在 render 内直接调用函数生成 VNode。
利用 Provide/Inject 特性进行层级无关的注入,但不支持监听。
利用 Vue 漏洞,传递可监听对象,子组件接收变动。这样可以透传获取 scopedSlots,但渲染问题需解决。
对于模板渲染,需使用工具将 render 函数转换为对应的组件。
一种解决方案是通过 attrs 和 listeners 完成透传。
如何透传vue的scopedSltos
利用 Provide/Inject 特性进行层级无关的注入,但不支持监听。利用 Vue 漏洞,传递可监听对象,子组件接收变动。这样可以透传获取 scopedSlots,但渲染问题需解决。对于模板渲染,需使用工具将 render 函数转换为对应的组件。一种解决方案是通过 attrs 和 listeners 完成透传。
如何在Vue2/3中正确透传插槽,提升组件编写效率?
至于vue3部分的插槽透传,可以参考$scopedSlots的用法。场景还原 首先我们基于BaseInput组件开发了一个CustomInput组件。const?BaseInput?=?{??name:?'BaseInput',??props:?['value'],??render()?{???return?(??????{this.$scopedSlots.prefix?.()}????this.$emit('input',?e.target.value)}?/>???