插槽
将其 props 合并到其直接子元素上。
原生插槽将任何绑定的值视为 作用域插槽(Scoped Slots),其中的值将暴露给父模板并被消费。
但 Reka UI 的插槽行为不同,它会将所有分配的属性合并到其直接子元素上。
示例
假设我们想为任何渲染的组件/元素分配一个 id
属性,但原生插槽会将其转换为作用域插槽,你需要手动分配该 id。
Vue
<!-- Native Slot -->
<!-- Comp.vue -->
<template>
<slot id="reka-01">
...
</slot>
</template>
<!-- parent template -->
<template>
<Comp v-slot="slotProps">
<button :id="slotProps.id">...<button>
<Comp>
<template>
(你可以查看 Vue SFC Playground,并会发现 id
并未被继承。)
如果你想确保某些属性被传递到特定元素上(可能出于可访问性原因),这会很麻烦。
或者,如果你使用 Reka UI 的 Slot
组件,分配给 Slot 组件的属性将由直接子元素继承,但你将无法再访问 作用域插槽(Scoped Slot)
。
Vue
<!-- Reka UI Slot -->
<script setup lang="ts">
import { Slot } from 'reka-ui'
</script>
<!-- Comp.vue -->
<template>
<Slot id="reka-01">
...
</Slot>
</template>
<!-- parent template -->
<template>
<Comp>
<!-- id will be inherited -->
<button>...<button>
<Comp>
<template>