R后悔药 Rue.js
  • 首页
    • 深度指南
    • 实战例子
    • 快速上手
    • 路由指南
    • 术语表
    • 错误代码参考
  • API
    • 合作伙伴
    • 插件
    • 组件库
    • 工具链
    • Text.js
    • 新闻简报
    • 常见问题
    • 团队
    • 版本发布
    • 社区指南
    • 行为规范
    • 隐私政策
  • 赞助
  • 合作伙伴
设置
目录统计
总条目
  • 你好,世界
  • 处理输入
  • Attribute 绑定
  • 条件与循环
  • 表单绑定
  • 简单组件
  • useApp().component 注册
  • Reactive Props Destructure
  • Props 与 useSetup
  • Slots 插槽
  • 原生 Web Components
  • Web Components 分项测试
  • 基础元素与自闭合标签
  • 表达式与插值
  • 属性、className、style 与 Props
  • 对象展开属性(spread props)
  • 条件渲染(?:、&&、null)
  • v-if / r-if 指令
  • v-show / r-show 指令
  • v-pre / r-pre 指令
  • v-once / r-once 指令
  • v-memo / r-memo 指令
  • v-text / r-text 指令
  • v-html / r-html 指令
  • v-on / r-on 指令
  • v-model / r-model 指令
  • 列表渲染与 key
  • v-for / r-for 指令
  • Template 无包装容器
  • Scoped Style 组件作用域样式
  • Fragments(<> … </>)
  • children 插槽与嵌套
  • 组件与 Props 传递
  • 动态组件(Component)
  • Suspense 异步边界
  • 异步组件懒水合
  • 事件处理
  • 受控输入
  • Refs 基础
  • Markdown 编辑器
  • 获取数据
  • 服务端预取
  • 资源
  • 资源(纯 JSX)
  • Rue Islands 总览
  • Island:client:load
  • Island:client:idle
  • Island:client:visible
  • Island:client:media
  • Island:client:interaction
  • Island:client:none
  • Island:client:only
  • Island:安全 Props
  • Island:Manifest Props
  • Island:client:* 编译
  • Context
  • 语言切换(_ 模型)
  • 路由 Demo:总览(嵌套路由)
  • 路由 Demo:守卫(beforeEnter)
  • 路由 Demo:实验页(受守卫保护)
  • 基础计数器
  • shallowRef 浅层 ref
  • triggerRef 手动触发
  • customRef 自定义 ref
  • onActivated 缓存生命周期
  • toRef 响应式句柄
  • toRefs 响应式解构
  • isRef 判定示例
  • isProxy 代理判断
  • isReadonly 判断
  • nextTick 真实业务场景
  • watchPostEffect DOM 读取
  • watchSyncEffect 同步防线
  • onWatcherCleanup 请求清理
  • effectScope 批量停止
  • onScopeDispose 作用域清理
  • getCurrentScope 作用域探针
  • 渲染函数计数器
  • onRenderTracked 调试
  • onRenderTriggered 调试
  • onDeactivated
  • onErrorCaptured 错误捕获
  • useState 计数器
  • 条件渲染
  • map 列表渲染
  • Todo 应用
  • 基础待办事项
  • 本地待办事项
  • 用户资料编辑
  • useState 数组
  • useState 对象
  • 本地 ref 计数器
  • 排序、筛选与网格
  • Store Query Sync 与 URL 状态
  • 树状视图
  • SVG 图表
  • SVG 共享标签命名空间
  • 带过渡动效的模态框
  • Transition mode
  • 子调父方法
  • 父控子计数
  • 组件级 v-model
  • 命名 v-model
  • 组件 emit
  • Hello children
  • 基础 children Box
  • 嵌套 children Box
  • Layout children
  • 过渡动效

插槽 Slots(default / named / scoped)

是,当前这里的 slot 是真实渲染。父组件传进来的不是字符串模板,而是实际的 JSX / renderable;宿主组件内部的 Slot 会在运行时把它取出来并直接渲染。

先看最小例子

把 slot 理解成“组件内部预留的洞口”。父组件传什么,洞口里就显示什么;没传就显示 fallback。

1. default slot

直接写在组件标签内部的内容,会落到默认插槽。

默认标题

没传 title slot,就显示这里。

这段内容就是 default slot。

默认底部

2. named slot

给某个直接子节点写 slot="name",它就会去对应的命名插槽。

自定义标题

中间这段还是 default slot。

自定义底部

3. scoped slot

宿主组件把数据通过 props 传给 Slot;父组件用同名函数 prop 接住它。

  • CPU
    来自 scoped slot props
    37%
  • 内存
    来自 scoped slot props
    1.2GB
如果只想先会用,记住这三条就够了:标签里的普通内容是 default slot,slot="name" 是 named slot,同名函数 prop 是 scoped slot。

再看完整例子

下面把 default、named、scoped、fallback 都放在一个组件里,看完整交互会更直观。

传入 slot 之后

自定义内容生效

支付面板

Template slot="title" 可以一次传多个兄弟节点。

default slot 负责主体内容;这里放的是正文、统计块和说明文本。

可用率
99.98%
过去 24 小时
峰值请求
18k
每分钟
  • P95 延迟
    来自 scoped slot props
    128ms
  • 错误率
    来自 scoped slot props
    0.18%
  • 待处理告警
    来自 scoped slot props
    3

未传 slot 时

fallback 接管

默认标题

没有提供 title slot 时,会显示这段 fallback。

fallback action

默认插槽为空时,这里显示主体内容的 fallback。

  • P95 延迟
    128ms
  • 错误率
    0.18%
  • 待处理告警
    3

当前推荐写法

  • default slot
    直接写在组件标签内部,最终会落到 props.children。
  • named slot
    单个节点可以直接写 slot="name",多个兄弟节点建议用 Template slot="name" 包起来。
  • scoped slot
    当前最稳妥的是传同名函数 prop,例如把 row 作为函数属性传给宿主组件。
  • fallback
    宿主组件内部在 Slot 标签里写的 children,就是 slot 缺失时的回退内容。

这页实际演示的协议

静态命名内容走 slot="name" 和 Template slot="name",作用域行模板走 row 函数 prop。
<Slot source={props} name="title">fallback</Slot>
<Template slot="title"><h2>支付面板</h2><p>多个兄弟节点</p></Template>
<button slot="actions">刷新</button>
<SlotPanel row={(slotProps) => <strong>{slotProps.label}: {slotProps.value}</strong>}><p>default slot 内容</p></SlotPanel>

这也解释了为什么当前 demo 会同时出现 slot 属性和函数 prop 两种形式:前者覆盖命名静态内容,后者负责 scoped slot。

页内导航
文档
  • 深度指南
  • 实战例子
  • 快速上手
  • 术语表
  • 错误码参照表
关于
  • 常见问题
  • 团队
  • 版本发布
  • 社区指南
生态
  • 插件
  • 组件库
  • 路由指南
  • Text.js
© 2024-2026 Xiangmin Liu
Rue.JS