vue3源码分析之slot实现原理

前言

此文章为个人分析源码的笔记,如果有解释不到位的地方,尽管评论。

demo地址

Gitee地址

实例

      const { render, h } = Vue

      const MyComponent = {
        setup(props, ctx) {
          return () => h('div', {}, ctx.slots.default(), ctx.slots.header())
        }
      }

      const VueComponent = {
        setup() {
          return () =>
            h(MyComponent, null, {
              default: () => h('p', { color: 'red' }, '123'),
              header: () => h('h2', null, '345')
            })
        }
      }

      render(h(VueComponent), document.getElementById('app'))

源码分析

  • 通过上述的实例,在生成组件MyComponent的时候,会在实例(instance)上产生slot属性
    在这里插入图片描述

  • 有一个观点组件的孩子一定是slot。下列图例就是slot孩子
    在这里插入图片描述- 接下来的目的就是将children上的属性都赋值给slots属性
    在这里插入图片描述

  • 最后使用的时候,直接可以通过ctx.slots来使用。会将属性slots作为参数来传递
    在这里插入图片描述

  • 上述就是slot执行过程,就是将children的值都赋值给slots属性,使用的时候直接到slots属性上获取

结束

slot的原理很简单,就分析这么多了。下一篇我们来分析ref如何赋值的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值