【vue高频面试题】第 21 题:Vue3 中的 Slot(插槽)— 基础、原理、使用场景、面试必问点

Vue3 中的 Slot(插槽)完整解析

Slot 是一种组件内容分发机制,让父组件将内容注入到子组件内部的指定位置,使组件更灵活、更易复用。

一、什么是 Slot?

  • 解决"结构固定、内容不确定"的场景
  • 父组件可动态传入内容,提高复用性(如 DialogSelectCard

二、三类插槽

1. 默认插槽(Default Slot)

子组件:

vue 复制代码
<template>
  <div class="card">
    <slot></slot>
  </div>
</template>

父组件:

vue 复制代码
<Card>我是默认内容</Card>

2. 具名插槽(Named Slot)

子组件:

vue 复制代码
<slot name="header" />
<slot />
<slot name="footer" />

父组件:

vue 复制代码
<Card>
  <template #header>标题</template>
  默认内容
  <template #footer>底部</template>
</Card>

3. 作用域插槽(Scoped Slot)

将子组件的数据传给父组件,由父组件决定如何渲染:

子组件:

vue 复制代码
<slot :row="rowData"></slot>

父组件:

vue 复制代码
<Child v-slot="{ row }">
  <div>{{ row.name }}</div>
</Child>

表格组件(如 Element Plus、Ant Design Vue)的自定义列广泛使用作用域插槽。

三、运行原理(高频)

  • 父组件的插槽内容在"父作用域"编译,但在子组件的 slot 位置渲染
  • 子组件只提供渲染占位;作用域始终属于父组件

示例:

vue 复制代码
<Child>
  {{ count }}
</Child>

上例中 count 来自父组件作用域,子组件无法修改父模板变量。

四、Slot 与 Props 的关系

  • Props:父 → 子(传值)
  • Scoped Slot:子 → 父(传数据,父负责渲染)
  • 二者互补,slot 不能替代 props

五、核心使用场景

  • UI 组件扩展(DialogDrawer
vue 复制代码
<Dialog>
  <template #footer>
    <button>确定</button>
  </template>
</Dialog>
  • 表格自定义列(作用域插槽)
vue 复制代码
<el-table-column label="姓名">
  <template #default="{ row }">
    <b>{{ row.name }}</b>
  </template>
</el-table-column>
  • 动态模板注入(卡片、菜单、布局组件)

六、常见追问

  • 追问 1:为什么父组件变量能在子组件 slot 中显示?

    • 插槽内容在父作用域编译,渲染位置在子组件,但执行上下文仍属父组件
  • 追问 2:slotscoped slot 的本质区别?

    • slot:父 → 子,父提供内容
    • scoped slot:子 → 父,子提供数据,父决定渲染
  • 追问 3:Vue3 中 slot 的编译结果?

    • 默认插槽 → $slots.default?.()
    • 具名插槽 → $slots.header?.()
    • 作用域插槽 → 参数化渲染函数 (slotProps) => VNode
  • 追问 4:setup 中如何访问 slot?

js 复制代码
import { useSlots } from 'vue'
const slots = useSlots()
slots.default?.()
slots.header?.()
  • 追问 5:slot 是否可动态调用?
vue 复制代码
<component :is="slots[name]"></component>

在 Vue3 中,插槽本质上是函数。

七、一句话总结

编译在父、渲染在子、作用域属于父。Slot 是父模板注入;Scoped Slot 用于子 → 父的数据回传。

相关推荐
学嵌入式的小杨同学12 小时前
从零打造 Linux 终端 MP3 播放器!用 C 语言实现音乐自由
linux·c语言·开发语言·前端·vscode·ci/cd·vim
芝士爱知识a12 小时前
2026年AI面试软件推荐
人工智能·面试·职场和发展·大模型·ai教育·考公·智蛙面试
weixin_4255437312 小时前
TRAE CN3.3.25 构建的Electron简易DEMO应用
前端·typescript·electron·vite·nestjs
Mr Xu_13 小时前
【Vue3 + ECharts 实战】正确使用 showLoading、resize 与 dispose 避免内存泄漏
前端·信息可视化·vue·echarts
0思必得013 小时前
[Web自动化] Selenium设置相关执行文件路径
前端·爬虫·python·selenium·自动化
石去皿13 小时前
大模型面试通关指南:28道高频考题深度解析与实战要点
人工智能·python·面试·职场和发展
雯0609~13 小时前
hiprint:实现项目部署与打印1-官网提供普通html版本
前端·html
C雨后彩虹14 小时前
CAS与其他并发方案的对比及面试常见问题
java·面试·cas·同步·异步·
美团程序员14 小时前
80道经典常见测试面试题
软件测试·面试·职场和发展·软件测试面试
测试秃头怪14 小时前
面试大厂就靠这份软件测试八股文了【含答案】
自动化测试·软件测试·python·功能测试·面试·职场和发展·单元测试