Vue 3 中的 h() 与 mergeProps() API 详解

前言

        在 Vue 3 中,随着 Composition API 的引入,我们有了更多的灵活性和控制权来构建我们的组件。其中,h() 函数和 mergeProps() 是在构建渲染函数或 JSX/TSX 时经常使用的两个工具。下面,我将对这两个 API 进行详细的解释。

h() 函数

   h() 函数,也被称为 createElement,是 Vue 3 中用于创建虚拟 DOM 节点的函数。它通常用于 JSX/TSX 语法中,或者当你需要手动编写渲染函数时。h() 函数接受三个参数:

  1. tag:一个字符串,作为元素的名称;或者一个组件对象。
  2. data:一个包含组件的 props/attributes、DOM 属性、DOM 属性修饰符、插槽等的对象。
  3. children:子虚拟节点 (VNodes),由 h() 或其他合法的参数(如字符串、数字等)创建。

使用示例:

import { h, createApp } from 'vue'  const HelloWorld = {  render() {  return h('div', 'Hello, World!')  }  
}  const App = {  render() {  return h('div', [  h('h1', 'Welcome to My App'),  h(HelloWorld)  ])  }  
}  createApp(App).mount('#app')

        在这个例子中,h() 函数被用来创建 div 元素和 HelloWorld 组件的虚拟 DOM 节点。这些节点随后被 Vue 的运行时系统用来更新实际的 DOM。

mergeProps() 函数

  mergeProps() 是 Vue 3 的内部 API,它用于合并多个 props 对象。当你在使用 setup() 函数或渲染函数时,有时你可能需要合并来自不同来源的 props,这时 mergeProps() 就派上了用场。虽然这个 API 主要用于内部,但在某些高级场景中,了解它的工作原理也是很有帮助的。

注意: 在大多数情况下,你不需要直接使用 mergeProps(),因为 Vue 会自动为你处理 props 的合并。但在编写自定义高阶组件或工具函数时,了解它的工作原理可能是有用的。

为什么要使用这些函数?

  • h() 函数是 Vue 3 虚拟 DOM 系统的基础。它允许你以编程的方式描述 UI 的结构,这对于构建动态和可复用的 UI 组件非常有用。
  • mergeProps()(尽管不直接暴露给开发者)在内部处理 props 的合并,确保了当多个 props 来源(如父组件传递的 props、组件自身的 props 默认值等)存在时,能够正确地合并这些 props。

        通过理解这两个函数的工作原理,你可以更深入地了解 Vue 3 的工作机制和如何更高效地编写 Vue 组件。 

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

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

相关文章

2024OD机试卷-求最多可以派出多少支团队 (java\python\c++)

题目:求最多可以派出多少支团队 题目描述 用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或者2人组成,且1个人只能参加1个团队,计算出最多可以派出多少只符合要求的团队。 输入描述 第一行代表总人数,范围1-500000 第二行数组代…

大模型微调之 在亚马逊AWS上实战LlaMA案例(四)

大模型微调之 在亚马逊AWS上实战LlaMA案例(四) 在 Amazon SageMaker JumpStart 上微调 Llama 2 以生成文本 Meta 能够使用Amazon SageMaker JumpStart微调 Llama 2 模型。 Llama 2 系列大型语言模型 (LLM) 是预先训练和微调的生成文本模型的集合&#x…

C++string续

一.find_first_of与find 相同:都是从string里面找字符,传参格式一样(都可以从某个位置开始找) 不同:find_first_of只能找字符,find可以找字符串 find_first_of参数里面的string与char*是每个字符的集合,指找出string…

普通组件的注册-局部注册和全局注册

目录 一、局部注册和全局注册-概述 二、局部注册的使用示例 三、全局注册的使用示例 一、局部注册和全局注册-概述 组件注册有两种方式: 局部注册:只能在注册的组件内使用。使用方法:创建.vue文件,在使用的组件内导入并注册。…

QX-mini51单片机学习-----(3)流水灯

目录 1宏定义 2函数的定义 3延时函数 4标准库函数中的循环移位函数 5循环移位函数与左移和右移运算符的区别 6实例 7keil中DeBug的用法 1宏定义 是预处理语句不需要分号 #define uchar unsigned char//此时uchar代替unsigned char typedef是关键字 后面是接分号…

Python实战开发及案例分析(5)—— 贪心算法

贪心算法是一种在每一步选择中都采取当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法不能保证得到最优解,但在某些问题中非常有效,并容易实现。 案例分析:找零问…

【Web前端】JavaScript—01

1.Javascript简介 简称JS,是当前最流行、应用最广泛的客户端脚本语言,用来在网页中添加一些动态效果与交互功能。在web开发领域有着举足轻重的地位。 2.JavaScript包含内容 核心ECMAScript(es):提供语言的语法和基本对象(数据类型、运算符、流程控制等…

Android Studio 之颜色

在Android中,颜色值由透明度alpha和RGB(红、绿、蓝)三原色定义,有八位十六进制数与六位十六进制数两种编码,例如八位编码FFEEDDCC,FF表示透明度,EE表示红色的浓度,DD表示绿色的浓度&…

Java特性之设计模式【代理模式】

一、代理模式 概述 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口 主要解决: 在直接访问…

设计模式——外观模式(Facade)

外观模式(Facade Pattern) 是一种结构型设计模式,它为一个子系统中的一组接口提供一个统一的高层接口,使得子系统更加容易使用。这种类型的设计模式属于结构型模式,它向客户端提供了一个接口,隐藏了子系统的…

项目管理-项目资源管理2/2

项目管理:每天进步一点点~ 活到老,学到老 ヾ(◍∇◍)ノ゙ 何时学习都不晚,加油 资源管理:6个过程“硅谷火箭管控” ①规划资源管理: 写计划 ②估算活动资源:估算团队资源&…

【代码随想录37期】Day01 二分查找 + 移除元素

二分查找 力扣704 贴一下之前的笔记: 没想到一下子写不出来,忘记什么是二分法了,这里回顾一下: 「二分查找 binary search」是一种基于分治策略的高效搜索算法。 它利用数据的有序性,每轮减少一半搜索范围&#xff…

Kafak 消费异常:The coordinator is not available.

Kafak 消费异常:The coordinator is not available. 1. 问题描述2. 问题排查2.1 Topic 状态异常2.2 `__consumer_offsets` 简介1. 问题描述 在新环境部署 Kafak 时,发现可以正常产生消息,但是无法正常消费消息,消费消息的异常日志如下: 11:59:53.315 [main] DEBUG org.a…

PPP点对点协议

概述 Point-to-Point Protocol,点到点协议,工作于数据链路层,在链路层上传输网络层协议前验证链路的对端,主要用于在全双工的同异步链路上进行点到点的数据传输。 PPP主要是用来通过拨号或专线方式在两个网络节点之间建立连接、…

docker-本地私有仓库、harbor私有仓库部署与管理

一、本地私有仓库: 1、本地私有仓库简介: docker本地仓库,存放镜像,本地的机器上传和下载,pull/push。 使用私有仓库有许多优点: 节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下…

SQL查询语句(三)范围查找关键字

在上一篇文章中,我们介绍了SQL语句中,逻辑关键字的作用,并举例演示了如何用逻辑关键字来组合WHERE子句。在文章的末尾我们提到了两个用于范围查找的关键字IN和BETWEEN。这两个关键字都可以与NOT关键字灵活组合,起到对字句结果取反…

深度学习中模块化设计的理念优势

模块化设计在深度学习领域中是一个重要的概念,比如在构建和改进类似于编码器-解码器这样的复杂模型时,transformer就是编码器-解码器架构的一个实例。模块化设计可以帮助我们快速集成最新的研究成果,支持模型的快速迭代,这些都与深…

Jmeter用jdbc实现对数据库的操作

我们在用Jmeter进行数据库的操作时需要用到配置组件“JDBC Connection Configuration”,通过配置相应的驱动能够让我们通过Jmeter实现对数据库的增删改查,这里我用的mysql数据库一起来看下是怎么实现的吧。 1.驱动包安装 在安装驱动之前我们要先查看当前…

【刷题篇】双指针(二)

文章目录 1、有效三角形的个数2、查找总价格为目标值的两个商品3、三数之和4、四数之和 1、有效三角形的个数 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 class Solution { public:int triangleNumber(vector<int>& n…

MQTT服务搭建及python使用示例

1、MQTT协议 1.1、MQTT介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的、基于发布/订阅模式的通信协议&#xff0c;通常用于物联网设备之间的通讯。它具有低带宽、低功耗和开放性等特点&#xff0c;适合在网络带宽有限或者网络连接不稳定…