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

embedded/2024/9/24 10:38:13/

前言

        在 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.ppmy.cn/embedded/33904.html

相关文章

Oracle用户授权的一些知识点

Oracle用户授权的一些知识点 常见用户授权场景跨模式授权的场景常见用户授权场景 数据库对象创建权限修改权限删除权限执行权限Procedure(存储过程)CREATE PROCEDURE 或 CREATE ANY PROCEDURE自己SCHEMA内无需额外授权;或 ALTER ANY PROCEDURE自己SCHEMA内无需额外授权;或 …

QT:按钮类控件

文章目录 PushButton快捷键Radio Buttion PushButton 这个类继承自QAbstractButton,是所有按钮的父类 创建一个带有图标的按钮: 假设这个图片是这个 那么我们就可以创建按钮并进行设置了: #include "widget.h" #include "u…

ES与关系数据库的同步练习(hotel_admin)

目录 1 es与数据库同步的方法2 实践2.1 任务介绍2.2 MQ方面操作2.2.1 声明交换机队列并且绑定2.2.2 hotel_admin端web层设置mq发送消息2.3 hotel_demo端监听接受消息并执行es操作 1 es与数据库同步的方法 方式一:同步调用 优点:实现简单,粗…

深入理解 ICMP 协议

目录 前言 1. 概述 特性与功能 报文封装与格式 2. ICMP差错报告 3. ICMP查询 4. ICMP应用 总结 前言 ICMP(Internet Control Message Protocol)是互联网控制报文协议,是TCP/IP协议族中的一个重要组成部分。作为网络层的协议之一&#…

Vue 监听键盘按下键 与 组合键

页面加载完成时监听 mounted() {document.addEventListener(keydown,this.handleKeyDown)}监听按下 handleKeyDown(event) {//监听 ctrlsif (event.ctrlKey && event.key s) {event.preventDefault();//阻止默认事件 如 打开其他的窗口console.log(1)}},

(39)4.29数据结构(栈,队列和数组)栈

#include<stdlib.h> #include<stdio.h> #define MaxSize 10 #define Elemtype int 1.栈的基本概念 2.栈的基本操作 typedef struct { Elemtype data[MaxSize]; int top; }Sqstack;//初始化栈 void InitStack(Sqstack& S) { S.top -1; //初始化…

SAP Fiori开发中的JavaScript基础知识19 - 综合练习

1. 背景 本篇博客将通过一个例子&#xff0c;来融汇贯通JavaScript中的基础知识点。 2. 题目说明 创建一个小型车队管理器应用程序。它维护两种类型的车辆:汽车和摩托车。 Vehicle定义了两个通用属性:车辆名称和制造年份。它包含一个print函数&#xff0c;用于打印车辆数据。…

Java学习之集合1

集合&#xff1a; 为什么需要集合&#xff0c;存储数据用数组不就行了吗&#xff1f; 对于对象数据据进行排序 &#xff1f; 以及对重复数据进行去重 &#xff1f; 以及存储对应的 Key Value 数据&#xff1f; 集合作为应该容器&#xff0c;内部提供了一些类&#xff0c;可以…