Vue3中h函数

Vue3认识h函数

Vue推荐在绝大数情况下使用模板来创建你的HTML,然后一些特殊的场景,你真的需要JavaScript的完全编程的能力,这个时
候你可以使用 渲染函数 ,它比模板更接近编译器;

  • 前面我们讲解过VNode和VDOM的概念:
  1. Vue在生成真实的DOM之前,会将我们的节点转换成VNode,而VNode组合在一起形成一颗树结构,就是虚拟DOM
    (VDOM);
  2. 事实上,我们之前编写的 template 中的HTML 最终也是使用渲染函数生成对应的VNode;
  3. 那么,如果你想充分的利用JavaScript的编程能力,我们可以自己来编写 createVNode 函数,生成对应的VNode;
  • 那么我们应该怎么来做呢?使用 h()函数:
  1. h() 函数是一个用于创建 vnode 的一个函数;
  2. 其实更准备的命名是 createVNode() 函数,但是为了简便在Vue将之简化为 h() 函数;

h()函数 如何使用呢?

  • h()函数 如何使用呢?它接受三个参数:
h("button", { onClick: increment }, "+1")// button:标签名
// { onClick: increment } 标签里的属性
// "+1" 标签里的文本
  • 注意事项
  1. 如果没有props,那么通常可以将children作为第二个参数传入;
  2. 如果会产生歧义,可以将null作为第二个参数传入,将children作为第三个参数传

h函数的基本使用

  • h函数可以在两个地方使用:
  1. render函数选项中;
  2. setup函数选项中(setup本身需要是一个函数类型,函数再返回h函数创建的VNode);
import { h } from 'vue'export default {render(){return h('div',{class:"app"},"Hello App")}
}

h函数计数器案例

options-Api中

<script>
import { h } from 'vue';
export default{data(){return {counter:0}},render(){return h("div",{className:"app"},[h("h2",null,`当前计数:${this.counter}`),h("button",{ onClick: this.increment},"+1"),h("button",{ onClick: this.decrement},"-1"),])},methods:{increment(){this.counter++},decrement(){this.counter--}}
}
</script>

setup函数中使用

<script>import { h, ref } from 'vue'export default {setup() {const counter = ref(0)const increment = () => {counter.value++}const decrement = () => {counter.value--}return () => h("div", { className: "app" }, [h("h2", null, `当前计数: ${counter.value}`),h("button", { onClick: increment }, "+1"),h("button", { onClick: decrement }, "-1"),h(Home)])}}
</script>

Composition-Api 中

<template><render />  <h2>内容</h2>
</template><script setup>import {ref,h} from 'vue';import Home from "./Home.vue";const counter = ref(0)const increment = () =>{counter.value++}const decrement = () =>{counter.value--}const render = () => h("div",{className:"app"},[h("h2",null,`当前计数:${counter.value}`),h("button",{ onClick:increment },"+1"),h("button",{onClick:decrement},"-1"),h(Home) // 引入组件])
</script>

** 注意:在setup中需要 **

实际开发中我们基本不用render函数,如果依然想使用JavaScript的方式渲染,我们一般用JSX来编写逻辑

** 感谢大家观看,我们下次见 **

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/865473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PolyGen: An Autoregressive Generative Model of 3D Meshes代码polygen_decoder.py解读

论文&#xff1a;PolyGen: An Autoregressive Generative Model of 3D Meshes 首先阅读transformer铺垫知识《Torch中Transformer的中文注释》。 以下为Encoder部分&#xff0c;很简单&#xff0c;小学生都会&#xff1a; from typing import Dict, Optional, Tuple import …

设计模式学习-《策略模式》

策略模式 问题描述&#xff1a; 有各种鸭子(北京鸭、玩具鸭)&#xff0c;鸭子有各种行为(叫、飞)希望能够实现不同的鸭子&#xff0c;显示不同鸭子的信息 传统方法会创建一个抽象类 public abstract class Duck{public Duck(){}public abstract void display();//显示鸭子信…

Spring Boot 高级配置:如何轻松定义和读取自定义配置

目录 1. 环境准备 2. 读取配置数据 2.1 使用 Value注解 2.2 Environment对象 2.3.2.3 自定义对象 这篇博客我们将深入探讨如何在Spring Boot应用中有效地定义和读取自定义配置。掌握这一技巧对于任何希望优化和维护其应用配置的开发者来说都是至关重要的。我们将从基础开始…

企业消费采购成本和员工体验如何实现“鱼和熊掌“的兼得?

有企业说企业消费采购成本和员工体验的关系好比是“鱼和熊掌”&#xff0c;无法兼得&#xff1f; 要想控制好成本就一定要加强管控&#xff0c;但是加强管控以后&#xff0c;就会很难让员工获得满意的体验度。如果不加以管控&#xff0c;员工自由度增加了&#xff0c;往往就很难…

动态住宅代理IP的3个优点

在大数据时代的背景下&#xff0c;代理IP成为了很多企业顺利开展的重要工具。代理IP地址可以分为住宅代理IP地址和数据中心代理IP地址。选择住宅代理IP的好处是可以实现真正的高匿名性&#xff0c;而使用数据中心代理IP可能会暴露自己使用代理的情况。 住宅代理IP是指互联网服务…

Jenkins教程-13-参数化任务构建

上一小节我们学习了发送html邮件测试报告的方法&#xff0c;本小节我们讲解一下Jenkins参数化任务构建的方法。 很多时候我们需要根据不同的条件去执行构建&#xff0c;如自动化测试中执行test、stg、prod环境的构建&#xff0c;Jenkins是支持参数化构建的。 以下是Jenkins官…

前端如何封装一个成熟的函数

前言 在前端开发中&#xff0c;封装函数是一种关键的实践&#xff0c;它能帮助我们更有效地管理代码、提高代码复用性和可维护性。 一个转换单位的工具函数 function setUnit(value,unit){switch(unit){case 白:return value / 100 unit;case 千:return value /1000 unit;…

web学习笔记(七十四)

目录 1.小程序常用组件 1.1 view 1.2 navigator 1.3 block 1.4 text 2.数据绑定 3.数据渲染 4.列表渲染 5.条件渲染 wx:if 和 hidden的区别 1.小程序常用组件 1.1 view <view>是布局容器 相当于div 我们通常习惯给页面包裹一个根组件&#xff0c;但是小程序…

Java 基本数据类型和引用数据类型有什么区别?

在Java世界里&#xff0c;数据类型是构建程序的基石&#xff0c;它们决定了变量可以存储什么类型的值以及如何操作这些值。 Java的数据类型大致可以分为两大类&#xff1a;基本数据类型&#xff08;Primitive Data Types&#xff09;和引用数据类型&#xff08;Reference Data…

【C语言】手撕结构体内存对齐

©作者:末央&#xff06; ©系列:C语言初阶(适合小白入门) ©说明:以凡人之笔墨&#xff0c;书写未来之大梦 目录 结构体对齐规则结构体大小计算 - 三步曲 结构体对齐规则 怎么计算结构体的内存大小。这就涉及到结构体内存对齐的问题。 结构体的第⼀个成员对⻬到…

构建Memcached集群:深入集群部署的策略与实践

构建Memcached集群&#xff1a;深入集群部署的策略与实践 Memcached是一款高性能的分布式内存缓存系统&#xff0c;广泛应用于提高Web应用的性能和扩展性。集群部署Memcached可以提供更高的缓存容量和可用性。本文将深入探讨Memcached集群部署的策略和注意事项&#xff0c;并提…

【C++】多态详解

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 一、多态概念 二、多态的定义及实现 1. 多态的构成条件 2. 虚函数 2.1 什么是虚函数 2.2 虚函数的重写 2.3 虚函数重写的两个…

PyPDF2拆分PDF文件为单个页面

本文目录 前言一、拆分成为单页1、代码解析2、处理效果图3、完整代码二、其它知识1、enumerate是什么① 语法② 功能③ 示例④ 更改起始索引前言 感觉之前写的不是很满意,为了充分满足付费用户的权益,所以打算把PyPDF2的各种类和用法都重新写一下,以便满足所有订阅用户的各…

transformer模型学习路线_transformer训练用的模型

Transformer学习路线 完全不懂transformer&#xff0c;最近小白来入门一下&#xff0c;下面就是本菜鸟学习路线。Transformer和CNN是两个分支&#xff01;&#xff01;因此要分开学习 Transformer是一个Seq2seq模型&#xff0c;而Seq2seq模型用到了self-attention机制&#xf…

三分钟看懂SMD封装与COB封装的差异

全彩LED显示屏领域中&#xff0c;COB封装于SMD封装是比较常见的两种封装方式&#xff0c;SMD封装产品主要有常规小间距以及室内、户外型产品&#xff0c;COB封装产品主要集中在小间距以及微间距系列产品中&#xff0c;今天跟随COB显示屏厂家中品瑞一起快速看懂SMD封装与COB封装…

使用高斯混合模型识别餐厅热点

使用 GMM 识别加拿大多伦多的直观餐厅集群&#xff08;附 Python 代码&#xff09; 聚类算法&#xff08;例如 GMM&#xff09;是一种有用的工具&#xff0c;可帮助识别数据中的模式。它们使我们能够识别数据集中的子组&#xff0c;从而提高你的理解或增强预测模型。在本文中&a…

DDR3(一)

目录 1 SDRAM1.1 同步动态随机存储器1.2 位宽1.3 SDRAM结构1.4 SDRAM引脚图 2 SDRAM操作指令2.1 读写指令2.2 刷新和预充电2.3 配置模式寄存器2.4 读/写突发2.5 数据屏蔽 SDRAM是DDR3的基础&#xff0c;在学习DDR3之前&#xff0c;我们先来学习一下SDRAM的相关知识。 1 SDRAM …

同样的APP为何在Android 8以后网络感觉变卡?

前言 在无线网络技术不断发展的今天&#xff0c;Wi-Fi已经成为了我们日常生活中不可或缺的一部分。无论是家庭娱乐、办公还是在线游戏&#xff0c;Wi-Fi都在提供着便捷的互联网接入服务。然而&#xff0c;在安卓8.1后&#xff0c;为了进一步延长安卓设备的待机时间。原生安卓(A…

推荐三款常用接口测试工具!

接口测试是软件开发中至关重要的一环&#xff0c;通过对应用程序接口进行测试&#xff0c;可以验证其功能、性能和稳定性。随着互联网和移动应用的快速发展&#xff0c;接口测试变得越来越重要。为了提高测试效率和质量&#xff0c;开发人员和测试人员需要使用专业的接口测试工…

【SCAU操作系统】期末复习简答及计算题例题解析

目录 一、写出下列英文缩写词在计算机系统中的英文或中文全名。 二、进程状态/调度/周转问题 &#xff08;1&#xff09;进程状态 &#xff08;2&#xff09;进程状态转换 &#xff08;3&#xff09;进程调度 &#xff08;4&#xff09;最短进程优先调度算法 三、逻辑地…