iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue3中的render函数里定义插槽和使用插槽
  • 591
分享到

vue3中的render函数里定义插槽和使用插槽

2024-04-02 19:04:59 591人浏览 泡泡鱼
摘要

目录render函数里定义插槽和使用插槽定义插槽定义有插槽的组件使用插槽vue3 render函数小变动render函数的参数render函数签名Vnode属性格式render函数里

render函数里定义插槽和使用插槽

vue3中this.slots和vue2的区别

Vue3:this.slots是一个{ [name: string]: (…args: any[]) => Array | undefined }的对象,每个具名插槽的内容都要通过函数调用。如v-slot:foo插槽分发的内容通过this.slots.foo( )返回

vue2:this.slots是一个{ [name: string]: ?Array }的对象,v-slot:foo的内容通过this.slots.foo来访问 , 而this.scopedSlots才是和vue3里的this.$slots作用一样.

定义插槽

this.$slots.[插槽名] 这个一个返回VNode数组的函数,用于访问静态插槽内容.

const BlogPost = defineComponent({
  render(){
    return h('div', [
      h('h1',this.$slots.header&&this.$slots.header()||'默认header插槽'),
      h('p',this.$slots.default&&this.$slots.default({message:'我是作用域插槽的message'})||'默认default插槽'),
      h('h4',this.$slots.footer&&this.$slots.footer()||'默认footer插槽'),
    ])
  }
})

// 以上代码相当于以下的template
<template>
	<div>
		<h1>
			<slot name="header">默认header插槽</slot>
		</h1>
		<p>
			<slot>默认default插槽</slot>
		</p>
		<h4>
			<slot name="footer">默认footer插槽</slot>
		</h4>
	</div>
</template>

定义有插槽的组件使用插槽

在h函数的第三个参数中使用{ [name: string]: (…args: any[]) => Array | undefined }形式的对象来定义组件的具体插槽内容

const BlogPostWrapper = defineComponent({
  render(){
    return h('div',
             {style:'background:skyblue'},
             h(
                  BlogPost,
                   null,
                   {
                  header(props){
                    return '我是传进的header插槽内容'
                  },
                    default(props){
                    // 这里的props就是作用域插槽的插槽prop
                    return 'BlogPostWrapper的default插槽内容::>>'+props.message
                  },
                  footer(props){
                    return '我是传进的footer插槽内容'
                  }
                }
            )
          )
      }
})
// 相当于template
<template>
    <div>
        <BlogPost>
            <tempalte #header>'我是传进的header插槽内容'</tempalte>
            <tempalte #default="props">
                {{'BlogPostWrapper的default插槽内容::>>'+props.message}}
            </tempalte>
            <tempalte #footer>我是传进的footer插槽内容</tempalte>
        </BlogPost>
    </div>
</template>

vue3 render函数小变动

Render function api?是不是感觉有点陌生?那恭喜你,这个改动不会对你这位 <template> 用户造成影响。

老规矩,上帝视角看一下:

  • h需要从全局导入进来(不再是 render 函数的参数了)
  • render函数的参数改变了(为了在常规组件和函数组件中表现一致)
  • VNodes具备了扁平的属性结构

render函数的参数

2.x 这么写

在 Vue 2.x 的版本中,render 函数会以参数的形式自动接收 h 函数(aka:createElement):

export default {
    render(h) {
        return h('div');
    }
}

3.x 应该这么写

在即将到来的 Vue 3.x 版本中,h 函数需要手动从全局引入进来:

import { h } from 'vue';
 
export default {
    render() {
        return h('div');
    }
}

render函数签名

2.x 这么写

上面也提到了,2.x 的 render 函数会自动接收 h 作为参数:

export default {
    render(h) {
        return h('div');
    }
}

3.x 应该这么写

在 3.x 版本中,render 函数不再接收任何参数了,它仅存的主要作用就是在 setup 函数中使用。这样方便获取作用域链中的响应式状态以及各种函数,当然了,也方便获取任何传递给 setup 函数的参数。

import { h, Reactive } from 'vue';
 
export default {
    setup(props, { slots, attrs, emit }) {
        const state = reactive({ count: 0 });
        
        function increment() {
            state.count++
        }
        
        // 返回一个 render 函数
        return () => {
            h(
                'div',
                { onClick: increment, },
                state.count,
            )
        }
    }
}

VNode属性格式

2.x 是这样的

domProps 是 VNode 属性中的一个“嵌套列表”:

{
    class: ['button', 'confirm-button'],
    style: { color: 'red' },
    attrs: { id: 'confirm' },
    domProps: { innerhtml: '' },
    on: { click: confirmCreate },
    key: 'submit-button',
}

3.x 中则是这样的

在 3.x 版本中,VNode 的所有属性都已经实现了“扁平化”的处理:

{
    class: ['button', 'confirm-button'],
    style: { color: 'red' },
    id: 'submit',
    innerHTML: '',
    onClick: confirmCreate,
    key: 'submit-button',
}

其实我也很少用 render 函数,毕竟 template 还是蛮香的。

如果想要获得更多的详细信息,请去这里:v3.vuejs.org/guide/migration/render-function-api.html(目前还没有中文版)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: vue3中的render函数里定义插槽和使用插槽

本文链接: https://www.lsjlt.com/news/153250.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue3中的render函数里定义插槽和使用插槽
    目录render函数里定义插槽和使用插槽定义插槽定义有插槽的组件使用插槽vue3 render函数小变动render函数的参数render函数签名VNode属性格式render函数里...
    99+
    2024-04-02
  • Vue默认插槽,具名插槽,作用域插槽定义及使用方法
    目录一、三种插槽的定义1.默认插槽2.具名插槽3.作用域插槽二、使用方法1.默认插槽2.具名插槽3.作用域插槽应用场景: 插槽的作用是在子组件中某个位置插入父组件的自定义html结构...
    99+
    2024-04-02
  • Vue3中slot插槽基本使用
    目录1.插槽基本使用2.插槽默认内容3.具名插槽3.1 基本使用3.2 简写3.3 默认插槽与具名插槽混用4.动态插槽名5.插槽作用域问题6.作用域插槽6.1 默认插槽作用域传值6....
    99+
    2022-11-13
    Vue3插槽使用 Vue3插槽
  • 浅析Vue中插槽Slot的作用和具名插槽
    一、插槽Slot1.1.插槽Slot的作用⭐⭐ 初识插槽:为了让这个组件具备更强的通用性,我们不能将组件中的内容限制为固定的div、span等等这些元素;【相关推荐:vuejs视频教程】比如某种情况下我们使用组件,希望组件显示的是一个按钮,...
    99+
    2022-11-22
    Vue vue3 vue.js 插槽
  • Vue3中插槽(slot)的全部使用方法
    目录什么是插槽默认内容具名插槽动态插槽名作用域插槽作用域插槽具名作用域插槽写在最后 Vue中的插槽相信使用过Vue的小伙伴或多或少的都用过,但是它的所有用法你是否全部理解呢?本篇文章...
    99+
    2024-04-02
  • Vue中的插槽怎么使用
    这篇“Vue中的插槽怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue中的插槽怎么使用”文章吧。默认插槽首先做一个...
    99+
    2023-06-30
  • Vue 中插槽的使用总结
    目录默认插槽具名插槽作用域插槽插槽总结默认插槽 首先做一个页面: 新增 Category.vue <template> <div class="category"...
    99+
    2024-04-02
  • Vue中的插槽如何使用
    本篇内容主要讲解“Vue中的插槽如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue中的插槽如何使用”吧!1、什么是插槽插槽(Slot)是 vue 为组件的封装者提供的能力。允许开发者在...
    99+
    2023-06-30
  • Vue和React的插槽怎么使用
    今天小编给大家分享一下Vue和React的插槽怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。插槽,在React中没找...
    99+
    2023-06-27
  • Vue中的插槽slot如何使用
    本篇内容主要讲解“Vue中的插槽slot如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue中的插槽slot如何使用”吧!1.什么是插槽插槽(slot)是 vue 为组件的封装者提供的能...
    99+
    2023-07-05
  • Vue中匿名插槽与作用域插槽合并和覆盖行为的示例分析
    小编给大家分享一下Vue中匿名插槽与作用域插槽合并和覆盖行为的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Vue 测试...
    99+
    2024-04-02
  • Vue中插槽和配置代理如何使用
    这篇“Vue中插槽和配置代理如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue中插槽和配置代理如何使用”文章吧。一...
    99+
    2023-07-05
  • Vue3父子通讯方式及Vue3插槽的使用方法详解
    在Vue3中父子通讯方式 Vue3父传子(props) 父组件如下: <template> <div class="about"> <h1&...
    99+
    2023-01-28
    Vue3父子通讯方式 Vue3插槽的使用 Vue3组件父传子 Vue3组件子传父 Vue3组件通讯
  • 浅谈Vue中插槽slot的使用方法
    如何定义和使用: 在组件的template中使用slot标签定义,slot标签中间可以定义默认显示值,如果slot标签没有声明name属性值,在使用插槽时将默认从第一个插槽依次往下...
    99+
    2024-04-02
  • vue中van-picker的选项插槽的使用
    目录van-picker的内部选项怎么来自定义Vant选择器使用插槽总结van-picker的内部选项怎么来自定义 首先要确保 Vant UI 的版本在2.10.0以上 然后利用插槽...
    99+
    2023-01-18
    vue van-picker van-picker选项插槽使用 vue插槽的使用
  • vue2中插槽(slot)的基本使用规范
    目录前言基础slot组件(匿名插槽)具名插槽作用域插槽解构插槽总结前言 在vue的开发过程中,我们会经常使用到vue的slot插槽组件,vue官方文档的描述: Vue 实现了一套内容...
    99+
    2024-04-02
  • vue.js动态组件和插槽的使用汇总
    目录组件进阶-props校验props校验组件进阶 - 动态组件组件进阶-keep-alive组件keep-alive组件进阶-keep-alive组件-指定缓存组件进阶 - 默认插...
    99+
    2024-04-02
  • Vue3父子通讯方式及Vue3插槽的使用方法是什么
    这篇文章主要介绍了Vue3父子通讯方式及Vue3插槽的使用方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue3父子通讯方式及Vue3插槽的使用方法是什么文章都会有所收获,下面我们一起来看看吧。Vue...
    99+
    2023-07-05
  • 浅析Vue中插槽和配置代理的使用方法
    如何正确快速使用Vue中的插槽和配置代理?下面本篇文章给大家介绍一下Vue中插槽和配置代理的使用方法,希望对大家有所帮助!一,插槽1.什么是插槽让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于父组件——>...
    99+
    2023-05-14
    配置代理 Vue 插槽
  • 如何正确快速使用Vue中的插槽和配置代理
    目录一,插槽1.什么是插槽1.1默认插槽1.2具名插槽1.3作用域插槽二,配置代理一,插槽 1.什么是插槽 让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适...
    99+
    2023-01-31
    Vue中的插槽和配置代理 Vue中的插槽 vue配置代理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作