vue入门:template 和 JSX
temlplate 和 jsx 最终渲染时都是创建 dom 节点
template 和 JSX 混合使用
<template>
<div>
<span>Message: {{ msg }}</span>
<br/>
<VNodes :vnodes="getJSXSpan()"/>
<VNodes :vnodes="getAnchoredHeading(4)"/>
</div>
</template>
<script>
export default {
components: {
// 用于描述真实 DOM 的结构
VNodes: {
// 函数式组件
functional: true,
// h 是 createElement 的简写,它是 Vue 的渲染函数,用于创建虚拟 DOM 节点
// ctx 是上下文,包含了 props, data, children 等信息
render: (h, ctx) => ctx.props.vnodes
}
},
data() {
return {
msg: "hello vue"
};
},
methods: {
// 渲染的 html
getJSXSpan() {
return <span>Message: {this.msg}</span>;
},
// 渲染的 html
getAnchoredHeading(level) {
// 构建标签
const Tag = `h${level}`;
return <Tag>Hello world!</Tag>;
}
}
};
</script>
ps:补充说明
// ctx.props.vnodes 是传递给函数式组件的一个 prop,它的值是一个虚拟 DOM 节点
render: (h, ctx) => ctx.props.vnodes
h:
h 是 createElement 的简写,它是 Vue 的渲染函数,用于创建虚拟 DOM 节点。
h 的第一个参数是标签名或组件选项,
第二个参数是节点的属性(如 props、class、style 等),
第三个参数是子节点。
ctx 是上下文对象,它包含了函数式组件的上下文信息。对于函数式组件,ctx 包含以下属性:
props:传递给组件的 props。
children:组件的子节点。
slots:组件的插槽内容。
data:组件的 v-bind 绑定数据。
parent:父组件的上下文。