Render函数
基本使用
render函数用于渲染html元素,用于利用JavaScript实现在template标签中做不了的事情。render提供一个h函数来构造元素,h函数的第一个参数是元素类型,第二个参数是元素的属性,第三个参数是元素的子组件:
<script>
import {h} from 'vue';
export default {
render() {
return h("h2",{class:"title"},"hello render");
},
}
</script>
render函数实现计数器
<script>
import {h} from 'vue';
export default {
data() {
return {
counter:0
}
},
render() {
return h("div",{class:"app"},[
h("h2",null,`当前计数:${this.counter}`),
h("button",{
onClick:()=>this.counter++
},"+1"),
h("button",{
onClick:()=>this.counter--
},"-1"),
]);
},
}
</script>
setup函数也可以完成替代render函数的功能:
<script>
import {h,ref} from 'vue';
export default {
setup(props) {
const counter=ref(0);
return ()=>{
return h("div",{class:"app"},[
h("h2",null,`当前计数:${counter.value}`),
h("button",{
onClick:()=>counter.value++
},"+1"),
h("button",{
onClick:()=>counter.value--
},"-1"),
]);
}
},
}
</script>
插槽的使用
// HelloWorld.vue
<script>
import { h } from 'vue';
export default {
render() {
return h("div",null,[
h("h2",null,"hello world"),
this.$slots.default? this.$slots.default({name:"sk"}):h("span",null,"我是hello world的默认插槽")
]);
},
}
</script>
// App.vue
<script>
import {h} from 'vue';
import HelloWorld from './HelloWorld.vue';
export default {
render() {
return h(HelloWorld,{},{
default: props=>h("span",null,`App传入HelloWorld的内容: ${props.name}`)
});
},
}
</script>