Vue3 — h()函数

news/2024/12/19 5:05:58/

前言:

        翻译的官网文档!!!

正文:

h()函数用于创建虚拟DOM节点,虚拟DOM是Vue框架中的核心概念,通过它,可以更高效的更新页面内容。

语法:

function h(type:string|Component,props?:object|null,children?:Children|Slot|Slots):VNode

第一个参数可以是字符串(用于原生元素)或Vue组件

第二个参数是要传递的属性,可以是标签的属性、事件监听器等

第三个参数是子元素,可以是文本、其他虚拟节点或数组

示例:

创建原生元素:(6、7没有追加到页面上)

<template><div id="p_box"></div><div id="p_foo_box"></div><div id="p_bar_box"></div><div id="p_envet"></div><div id="div_bar"></div>
</template>
<script setup lang="ts">
import { h, render, onMounted } from "vue";
onMounted(() => {//1、创建p标签let p = h("p");let p_box = document.getElementById("p_box");render(p, p_box);//2、创建id=foo的p标签let p_id = h("p", { id: "foo" });let p_foo_box = document.getElementById("p_foo_box");render(p_id, p_foo_box);//3、创建class=bar的p标签,标签内容是hellolet p_bar_box = h("p", { class: "bar", innerHTML: "hello" });let p_bar = document.getElementById("p_bar_box");render(p_bar_box, p_bar);//4、children 可以是一个字符串let div_dom = h("div", { id: "bar" }, "hello");let div_bar = document.getElementById("div_bar");render(div_dom, div_bar);//5、创建 button 按钮,点击按钮输出控制台输出123let p_event = h("button",{onClick: () => {console.log(123);},},"提交");let p_event_box = document.getElementById("p_envet");render(p_event, p_event_box);//6、props可以省略,当没有props时h("div", "hello");h("div", [h("span", "helle")]);//7、children数组可以包含混合的vnode和字符串h("div", ["hello", h("span", "hello")]);
});
</script>

 页面效果:

创建组件:

        1、父组件向子组件传递自定义属性,子组件触发自定义事件

        App.vue

<template><div id="box1"></div>
</template>
<script setup lang="ts">
import Welcom from "./components/welcome.vue";
import { h, render, onMounted } from "vue";
onMounted(() => {//传递属性let box1 = document.getElementById("box1");render(h(Welcom, {someProp: "hello",onUpdate: () => {console.log("点击了子组件span元素身上的click事件");},}),box1);
});
</script>

         Welcome.vue

<!-- welcom组件 -->
<template><div class="welcom">恭喜您有时间摸鱼学习!</div><span @click.stop="handlerEvent">{{ someProp }}</span>
</template>
<script setup lang="ts">
defineProps<{someProp: string;
}>();
const emits = defineEmits(["update"]);
function handlerEvent() {emits("update");
}
</script>

         页面效果:

        

         2、传递单个默认插槽

        App.vue组件

<template><div id="box1"></div>
</template>
<script setup lang="ts">
import Welcom from "./components/welcome.vue";
import { h, render, onMounted } from "vue";
onMounted(() => {//传递单个默认插槽let box1 = document.getElementById("box1");render(h(Welcom, () => "传递单个默认插槽"),box1);
});
</script>

         Welcome.vue组件

<!-- welcom组件 -->
<template><div class="welcom">恭喜您有时间摸鱼学习!</div><span><slot></slot></span>
</template>
<script setup lang="ts"></script>

         页面效果:

         3、传递命名插槽时,需要使用 null 以避免插槽对象被当作属性处理。

        App.vue

<template><div id="box1"></div>
</template>
<script setup lang="ts">
import Welcom from "./components/welcome.vue";
import { h, render, onMounted } from "vue";
onMounted(() => {//传递单个默认插槽let box1 = document.getElementById("box1");render(h(Welcom, null, {default: () => "默认插槽展示内容",foo: () => h("div", "foo"),bar: () => [h("span", "one"), h("span", "two")],}),box1);
});
</script>

         Welcome.vue

<!-- welcom组件 -->
<template><div class="welcom">恭喜您有时间摸鱼学习!</div><slot></slot><slot name="foo"></slot><slot name="bar"></slot>
</template>
<script setup lang="ts"></script>

         页面效果:

        


http://www.ppmy.cn/news/1556302.html

相关文章

远程控制电脑技术让我们的生活更加简化

在忙碌的现代生活节奏下&#xff0c;远程控制电脑技术已经成为我们生活中不可或缺的一部分。无论是在家办公&#xff0c;还是在旅途中需要紧急处理工作&#xff0c;远程控制电脑都能为我们提供极大的便利。今天&#xff0c;我们就来聊聊远程控制电脑技术是如何简化我们的生活&a…

Jupyter Notebook的安装与使用

Jupyter Notebook 是一个开源的交互式笔记本环境&#xff0c;可用于进行数据分析、可视化、机器学习建模等工作。它支持多种编程语言&#xff0c;包括 Python、R 和 Julia 等&#xff0c;因此非常适合数据科学家和研究人员。 使用 Jupyter Notebook&#xff0c;你可以在一个网页…

【STM32 Modbus编程】-作为从设备读取保持-输入寄存器

作为从设备读取保持-输入寄存器 文章目录 作为从设备读取保持-输入寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备1.4 STM32基础代码准备2、读取保持寄存器3、读取输入寄存器在本文中,我们将STM32单片作为ModBus的从设备,实现保持寄存器和输入寄存…

Kubernetes 存储方案

Kubernetes 存储方案 在 Kubernetes&#xff08;K8s&#xff09;中&#xff0c;容器是无状态的&#xff0c;意味着它们在启动、停止或重启时不会保留数据。虽然这种设计让容器非常轻量和灵活&#xff0c;但在实际应用中&#xff0c;我们往往需要持久化存储&#xff0c;比如数据…

LeetCode hot100-82

https://leetcode.cn/problems/pascals-triangle/description/?envTypestudy-plan-v2&envIdtop-100-liked 118. 杨辉三角 已解答 简单 相关标签 相关企业 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。在「杨辉三角」中&#xff0c;每个数是它…

SQL Server数据库还原差异备份

适用范围&#xff1a;SQL Server 本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中还原差异数据库备份。 限制和局限 不允许在显式或隐式事务中使用 RESTORE。 无法在早期版本的 SQL Server 中还原较新版本的 SQL Server创建的备份。 在…

MyBatis写法汇总

Mybatis写法汇总 1. 批量操作 1.1 批量插入 <insert id"batchInsert" parameterType"java.util.List">INSERT INTO user (username, password, create_time) VALUES<foreach collection"list" item"item" separator"…

三菱协议以及C#实现

三菱 三菱的是422的只能用编程口通讯&#xff0c;只能用编程口协议。 波特率&#xff1a;9600数据位位数&#xff1a;7位停止位位数&#xff1a;1位数据校验方式&#xff1a; 偶校验 * D0&#xff1a; 1000 2000 3000 频率 * M0: 电机正转 true 、false * M1&#xff1a;电机…