什么是插槽
最近在学习组件封装,频繁用到插槽的知识,但是由于这个玩意规则巨多,而且根本记不住,故在此总结一波~
插槽的应用场景
有几个组件,他们长得很像(结构一样),但是呢,里面的文字不一样,这个时候总不能复制粘贴吧,于是就出现了插槽。说白了:插槽就是父组件向子组件传递不同的元素(内容不同),不同子组件显示不同的内容。
深入理解插槽
父组件传过去的插槽本质上就是一个代理对象(Proxy),默认就是default属性,当你给指定属性的名字的时候,就是具名插槽,传入参数的话就是作用域插槽。
每个属性就是一个函数,调用这个函数就能拿到虚拟节点。子组件那边直接调用函数拿到虚拟DOM,渲染到页面上。这个就是插槽的本质,再也不用记那些复杂的规则了~
示例: 父组件传过去的
<p>default slot</p>
<template #slot1>
<p>slot1</p>
</template>
<template #slot2="{msg}">
<p>slot2:{{msg}}</p>
</template>`
子组件接收:
<slot></slot>
<slot name="slot1"></slot>
<slot name="slot2" msg="helloworld"></slot>
接收到的就是一个代理对象,对象里面有三个方法default,slot1,slot2(可以传一个参数),子组件调用这三个函数(作用域插槽可以传一个参数),返回一个vNode,然后渲染到页面上。