您现在的位置是:网站首页> 编程资料编程资料

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

2023-05-24 346人已围观

简介 vue3中的render函数里定义插槽和使用插槽_vue.js_

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 

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

在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 

vue3 render函数小变动

Render function API?是不是感觉有点陌生?那恭喜你,这个改动不会对你这位