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:父组件的上下文。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值