关于vue的Render和slot-scope等
在vue的入口文件中我们可以看到类似这样的一段代码(vue2)
vue
new Vue({
el: '#app',
render: h => h(App)
})当然也可能是这样的(vue3)
const app = createApp(MyApp)
app.mount('#app')这样的代码主要起到了挂载vue示例的作用,这里主要着眼于vue2挂载时render这个方法。
这个方法的作用是挂载一个虚拟dom。vue是mvvc架构的,一般不操作真实dom,即使操作也尽量操作虚拟dom。在组件内部的html代码一般是属于vnode这个类的,这个时候想要是vnode显示出来,除了使用插槽,也可以直接使用render将其渲染出来。
值得一提的是slot和slot-scope属性将要被废弃使用,转而要使用v-slot。比如slot="header"<---->v-slot:header,slot-scope="header"<---->v-slot:header="header"。不管使用哪种方法都要注意slot-scope之类的是作用域插槽,这一类插槽是可以访问到子组件中的data的,当然也可以使用vnode.data.scopedSlots[插槽名]({注意:这里可以传参})这样的方法为作用域插槽自定义传值。