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

vue3中this. s l o t s 和 v u e 2 的 区 别 v u e 3 : t h i s . slots和vue2的区别 vue3:this. slotsvue2vue3:this.slots是一个{ [name: string]: (…args: any[]) => Array | undefined }的对象,每个具名插槽的内容都要通过函数调用如v-slot:foo插槽分发的内容通过this. s l o t s . f o o ( ) 返 回 v u e 2 : t h i s . slots.foo()返回 vue2:this. slots.foo()vue2:this.slots是一个{ [name: string]: ?Array }的对象,v-slot:foo的内容通过this. s l o t s . f o o 来 访 问 , 而 t h i s . slots.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>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js中,render函数用于将组件的模板渲染成虚拟DOM。通过编写render函数,我们可以手动定义组件的渲染逻辑,而不是使用模板语法。在Vue2中,可以在Vue实例的选项中编写render函数,并使用Vue的渲染器将其调用。render函数接收一个参数h,它是一个用于创建虚拟DOM的函数。在render函数中,我们可以使用h函数来创建各种节点,例如div、span等。我们可以通过调用h函数并传入标签名称和其他选项来创建节点。在render函数中,this指向当前的Vue实例,因此我们可以直接访问Vue实例的data数据、props、插槽等元素。这样可以方便地在render函数使用这些数据来动态生成虚拟DOM。此外,我们还可以在render函数中创建包含全局组件或异步组件的vnode。可以通过在h函数的第一个参数中传入组件选项来创建包含全局组件的vnode。同样,对于异步组件,也可以在h函数的第一个参数中传入异步组件的选项来创建相应的vnode。通过编写render函数,我们可以更加灵活地控制组件的渲染过程,并实现更复杂的渲染逻辑。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [vue2的render函数你用过吗?](https://blog.csdn.net/pfourfire/article/details/124682597)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值