vue3 slot 插槽 在h函数中如何使用

这篇具有很好参考价值的文章主要介绍了vue3 slot 插槽 在h函数中如何使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue3 h函数中如何使用插槽

前言

vue3已经出了有一段时间了,越来越多的小伙伴开始用vue3来写项目。开发过程中难免会用到h函数, 有时候会使用h函数封装一些组件,封装组件又会用到插槽。所以呢对于在h函数中如何使用插槽稍作了整理,希望能帮到帮接触h函数的小伙伴。

这里只讲解插槽的用法,不涉及h函数如何使用,如需了解h函数用法,可查阅官网文档-渲染函数

什么是h函数

h()hyperscript 的简称——意思是“能生成 HTML (超文本标记语言) 的 JavaScript”。这个名字来源于许多虚拟 DOM 实现默认形成的约定。一个更准确的名称应该是 createVnode(),但当你需要多次使用渲染函数时,一个简短的名字会更省力。

使用插槽

插槽使用方式这里可分为两种,下面一一介绍。

第一种方式 (使用slots.xxxxx?.())
  • 默认插槽

    这里是一个子组件A.ts

    import { h, defineComponent } from 'vue'
    export default defineComponent({
        setup(_, { slots }) {
            return () => h('span', slots.default?.())
        }
    })
    
  • 具名插槽

    这里是一个子组件B.ts

    import { h, defineComponent } from 'vue'
    export default defineComponent({
        setup(_, { slots }) {
            return () => h('span', slots.foo?.())
        }
    })
    

    这个foo就是具名插槽的名字

  • 作用域插槽

    这里是一个子组件C.ts

    import { h, defineComponent } from 'vue'
    export default defineComponent({
        setup(_, { slots }) {
            return () => h('span', slots.footer?.({ msg: '这是一条来自作用域插槽(C组件)传递的数据', list: ['a', 'b', 'c', 'd'] }))
        }
    })
    

    { msg: '这是一条来自作用域插槽(C组件)传递的数据', list: ['a', 'b', 'c', 'd'] } 这个对象就是向外部传递的数据

  • 在父组件中使用

    这是父组件Content.ts

    import { h, defineComponent } from 'vue'
    import A from './A'
    import B from './B'
    import C from './C'
    export default defineComponent({
        setup() {
            return () => h('div', [
                h(A, () => h('div', '我是默认插槽')),
              	// 注意 `null` 是必需的
    						// 以避免 slot 对象被当成 prop 处理
                h(B, null, { foo: () => h('div', '我是具名插槽') }),
              	// 注意 `null` 是必需的
    						// 以避免 slot 对象被当成 prop 处理
                h(C, null, {
                    // 通过解构得到插槽作用域的参数
                    footer: ({ msg, list }: { msg: string, list: string[] }) => [
                        h('h2', '我是作用域插槽'),
                        h('div', `msg: ${msg}`),
                        h('div', `list: 接收到了作用域插槽(C组件的List)---> ${list}`),
                    ]
                }),
            ])
        }
    })
    

vue3 slot 插槽 在h函数中如何使用,vue3,javascript,前端,vue.js

第二种方式 (使用renderSlot)
  • 默认插槽

    这里是一个子组件A.ts

    import { renderSlot, h, defineComponent } from 'vue'
    export default defineComponent({
        setup(_, { slots }) {
            return () => h('div', renderSlot(slots, 'default'))
        }
    })
    
  • 具名插槽

    这里是一个子组件B.ts

    import { renderSlot, h, defineComponent } from 'vue'
    export default defineComponent({
        setup(_, { slots }) {
            return () => h('div', renderSlot(slots, 'foo'))
        }
    })
    

    这个foo就是具名插槽的名字

  • 作用域插槽

    这里是一个子组件C.ts

    import { renderSlot, h, defineComponent } from 'vue'
    export default defineComponent({
        setup(_, { slots }) {
            return () => h('div', renderSlot(slots, 'footer', { msg: '这是一条来自作用域插槽(C组件)传递的数据', list: ['a', 'b', 'c', 'd'] }))
        }
    })
    

{ msg: '这是一条来自作用域插槽(C组件)传递的数据', list: ['a', 'b', 'c', 'd'] } 这个对象就是向外部传递的数据

  • 父组件中使用

    这是父组件Content.ts

    import { h, defineComponent } from 'vue'
    import A from './A'
    import B from './B'
    import C from './C'
    export default defineComponent({
        setup() {
            return () => h('div', [
                h(A, () => h('div', '我是默认插槽')),
                // 注意 `null` 是必需的
                // 以避免 slot 对象被当成 prop 处理
                h(B, null, { foo: () => h('div', '我是具名插槽') }),
                // 注意 `null` 是必需的
                // 以避免 slot 对象被当成 prop 处理
                h(C, null, {
                    // 通过解构得到插槽作用域的参数
                    footer: ({ msg, list }: { msg: string, list: string[] }) => [
                        h('h2', '我是作用域插槽'),
                        h('div', `msg: ${msg}`),
                        h('div', `list: 接收到了作用域插槽(C组件的List)---> ${list}`),
                    ]
                }),
            ])
        }
    })
    
    

    两种方式区别不大,就是一个使用renderSlot, 一个使用slots.xxxxx?.()的方式。

vue3 slot 插槽 在h函数中如何使用,vue3,javascript,前端,vue.js

其他

如果想了解Tsx中如何使用插槽可参考Tsx中使用插槽文章来源地址https://www.toymoban.com/news/detail-699569.html

到了这里,关于vue3 slot 插槽 在h函数中如何使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3的setup 语法糖中获取slot 插槽的dom对象

    最近使用vue3开发项目,需要封装一个无限滚动的组件,使用scroll组件内置插槽接受模板的方式,所以需要在scroll组件内获取到模板渲染后dom元素的宽高。 但是setup语法糖是组件生命周期的beforeCreate和created中,而且经过测试,在mounted函数中的el属性也是null,所以得出结论模板

    2024年02月15日
    浏览(57)
  • Vue slot 插槽使用详解

    在当今Web开发领域中,构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架,正是为了满足这些需求而诞生。它采用了MVVM架构模式,并通过数据驱动和组件化的方式,使我们能够更轻松地构建出优雅而高效的Web应用程序。

    2024年01月16日
    浏览(44)
  • 微信小程序slot插槽的介绍,以及如何通过uniapp使用动态插槽

    微信小程序文档 - slots介绍 由上述文档看俩来,微信小程序官方并没有提及动态插槽内容。 uniapp文档 - slots介绍 uni官方也未提及关于动态插槽的内容 在实际使用中,直接通过 slot :name=\\\"item.xxx\\\" / 这种形式会报错, 网上搜了大量资料发现只能通过条件编译的方式  下面是兼容微

    2024年02月07日
    浏览(44)
  • element-ui Vue 封装组件按钮工具栏,使用slot插槽

    封装常用按钮工具栏,方便其它页面调用 缺点:工具栏下面div会显示工具栏下面,下面需要使用margin-top:40px(小学生一个没整明白)希望大神能帮解决 运行效果          组件代码 tt-btnBar.vue 父窗口调用 testbtnbar.vue

    2024年02月02日
    浏览(41)
  • Vue插槽 slot 标签

    Vue 插槽 slot 标签: 作用:让父组件可以向子组件指定的位置插入一段 html 结构,也属于一种组件之间的通信方式,适用于父传子  不使用插槽: 创建 List 组件,接收父元素传递的数据,用于显示分类列表。 在 Home 页面中引用 List 组件,并传递对应的数据。 注 :组件会根据

    2024年02月11日
    浏览(40)
  • Vue-插槽(Slots)

    在Vue.js中,插槽是一种强大的功能,它允许你创建可重用的模板,并在使用该模板的多个地方插入自定义内容。 插槽为你提供了一种方式,可以在父组件中定义一些“插槽”,然后在子组件中使用这些插槽,插入自己的内容。 2.1 默认插槽(Default Slots) 这是最常见的插槽类

    2024年01月22日
    浏览(39)
  • vue3中如何使用el-tooltip中的插槽达到换行效果

    el-tooltip的content属性中的内容可以使用插槽来替换 话不多说,直接上代码 最后放上效果对比图,如果觉得有帮到你,可以给我一个赞吗😜 没换行前的效果 换行后的效果

    2024年02月10日
    浏览(53)
  • vue知识点————插槽 slot

    slot 插槽 在父组件中引用的子组件 在父组件中写入百度 可在子组件slot插槽中展示出 父组件 子组件 父组件 子组件 这里父组件可以访问父组件的数据并且可在slot中展示到,不可以在父组件中访问子组件的数据,就相当于父组件百度—{{ user.name }}{{ url }} 这里的url是访问不到的

    2024年02月09日
    浏览(40)
  • Vue中的ajax和slot插槽

    在前后端分离项目中,解决跨域问题是一个常见的需求。下面列举了几种常用的跨域解决方法: CORS(跨域资源共享):这是最常用且推荐的跨域解决方案。通过在服务器端设置响应头,允许特定的源(域名、协议、端口)访问资源。在后端服务器上进行配置即可实现跨域请

    2024年02月10日
    浏览(45)
  • Vue 3 中的插槽(Slots)用法

    插槽(Slots)是 Vue 组件中一种非常有用的功能,用于在父组件中向子组件传递内容。Vue 3 引入了 script setup 语法,使得组件的写法更加简洁和易读。在本篇博客中,我们将探讨在 Vue 3 中使用插槽的不同方式,包括默认插槽、具名插槽以及作用域插槽。 默认插槽是 Vue 组件中最

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包