深入理解 Vue 3 中的 h 函数

news/2024/12/17 16:15:19/文章来源:https://www.cnblogs.com/shyhuahua/p/18612673

1. 什么是 h 函数?

h 函数是 Vue 3 中用来创建虚拟节点(VNode)的工具,它的本质是 createVNode 方法的简写。 h 函数的语法签名如下:

h(type, props?, children?)
  • type: 节点的类型,可以是 HTML 标签(如 'div')、组件或函数。
  •  props: 节点的属性对象,例如 class、style、事件监听器等。
  • children: 子节点,可以是字符串、数组或者嵌套的 h 函数。

2. 为什么需要 h 函数?

Vue 通常是基于模板语法的,例如:

<template><div class="container"><h1>Hello Vue 3</h1></div>
</template>

模板语法非常直观,但在某些场景下,模板无法满足需求,例如:

1. 动态创建节点:节点类型、属性、内容需要通过逻辑动态生成。

2. 渲染函数:当组件没有模板时,使用渲染函数替代模板。

3. 使用 JSX:配合 JSX 语法编写更简洁的代码。  这时候,h 函数就派上了用场。

3. h 函数的基本用法

3.1 渲染一个简单的元素

import { h, defineComponent } from 'vue';export default defineComponent({render() {return h('div', { class: 'my-container', style: { color: 'red' } }, 'Hello Vue 3');},
});

渲染结果:

<div class="my-container" style="color: red;">Hello Vue 3</div>

3.2 渲染一个组件

h 函数可以用来渲染子组件,并传递 props 和事件。

import { h, defineComponent } from 'vue';
import MyButton from './MyButton.vue';export default defineComponent({render() {return h(MyButton, {type: 'primary',onClick: () => alert('Button Clicked!'),});},
});

3.3 渲染多个子节点

children 参数可以是一个数组,来表示多个子节点:

import { h } from 'vue';export default {render() {return h('div', {}, [h('h1', {}, 'Title'),h('p', {}, 'This is a paragraph.'),h('button', { onClick: this.handleClick }, 'Click Me'),]);},methods: {handleClick() {alert('Button clicked!');},},
};

3.4 动态生成内容

当需要根据数据动态生成节点时,h 函数非常灵活。

import { h } from 'vue';export default {props: ['items'],render() {return h('ul',{},this.items.map((item) => h('li', { key: item.id }, item.name)));},
};

4. h 函数与 JSX

Vue 3 支持 JSX 语法,JSX 其实是对 h 函数的封装和语法糖。通过编译,下面的 JSX 代码:

export default {render() {return (<div class="container"><h1>Hello Vue 3</h1><p>Using JSX!</p></div>
    );},
};

会被编译成:

import { h } from 'vue';export default {render() {return h('div', { class: 'container' }, [h('h1', {}, 'Hello Vue 3'),h('p', {}, 'Using JSX!'),]);},
};

5. 使用场景总结

1. 动态渲染:根据条件渲染不同的节点或组件。

2. 自定义渲染函数:当模板无法满足需求时,使用渲染函数。

3. 高级组件开发:编写高阶组件、动态组件时,h 提供更大的灵活性。

4. 结合 JSX:编写更清晰、可维护的代码。

6. 常见问题

Q1: h 和 Vue 2 中的 createElement 有什么区别?

• 在 Vue 2 中,createElement 用于创建虚拟节点。

• 在 Vue 3 中,h 是 createVNode 的简写,功能更强大、更灵活。 

Q2: 使用 h 和 JSX,性能有什么差别?

性能上没有显著差别,因为 JSX 最终会编译成 h 函数调用。选择哪个主要取决于个人开发习惯和团队代码风格。

7. 总结

• h 函数是 Vue 3 中创建虚拟 DOM 节点的核心工具。

• 通过 h 函数可以实现动态渲染、组件渲染以及复杂的渲染逻辑。

• 配合 JSX 使用,代码更加简洁、可读性更高。

• 掌握 h 函数,让你更好地理解 Vue 3 的渲染机制,编写更灵活的组件。

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

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

相关文章

声音

音乐 音效 摄像机听声音 对象(物体)播放声音 脚本控制音乐播放 键盘控制音乐播放及音效播放

SQL Server数据库数据的导入与导出

不同数据库之间导数据 flowchart LR 右键单击需要导数据的数据库--点击-->任务--点击-->导出数据点击下一步选择数据源 Microsoft OLE DB Provider for SQL Serverflowchart LR 选择好数据源-->设置服务器名称-->选择使用SQLServer身份验证-->输入用户名和密码-…

gown和robe的区别

中文词典总是把gown和robe翻译成“礼袍”或者“长袍”。这样虽然不算错,但是非常误导人。 通常,gown指的是晚礼服。比如中国婚礼上新娘穿的拖地的裙子。而robe则一般指睡衣。这两个东西可以说是八竿子打不着的东西。gownrobe 之所以词典总是翻译成礼袍或者长袍,是因为robe可…

一文读懂光纤以太网IEEE 802.3cz-上

应用于工业领域的光通信技术因其高带宽、长距离、低电磁干扰的特点得到了密切的关注,IEEE在2023年发布了802.3cz协议,旨在定义一套光纤以太网在车载领域的应用标准。 随着对车载高速总线的深入研究,以电信号为媒介的传输方式逐渐显露出劣势,当传输速率超过25Gbps时,…

vue3中配置svg

整体目标实现一个在 Vue 项目中方便使用 SVG 图标,允许在页面中通过自定义标签直接引用 SVG 图标,无需手动引入每个图标文件。具体步骤1. 使用方式 页面中直接写标签,myicon是svg图片文件名,不需要引入。myicon文件放在指定的svg目录中即可。<svg-icon icon-class="…

线性电源 单电源供电 正负双路输出 万分之一纹波 高转换效率 输入3~40V,输出线性电压2.5~32V 可调

线性电源 单电源供电 正负双路输出 万分之一纹波 高转换效率 输入3~40V,输出线性电压2.5~32V 可调低纹波双路可调线性电源 宽电压输入输出高转换效率 BSN30WL是一款宽电压输入的升降压、正负电压线性电源。它具有多种应用场景,例如用于精密运放的正负电源、模数和数模转换的供…

提升互联网项目效率!J 人团队必备办公软件有哪些?

前言:在互联网行业这个瞬息万变、竞争激烈的领域,高效的团队协作与个人学习效率是企业和从业者取得成功的关键因素。对于 J 人主导的互联网公司和团队而言,他们对秩序、规划和高效执行的追求,使得可视化团队协作办公软件成为不可或缺的工具。本文将站在 J 人互联网公司的角…

Windows-清除电脑(主文件夹)中“最近使用的文件”(痕迹)

如何清除电脑(主文件夹)中 “最近使用的文件”(痕迹)? (1)在任务栏这里点击 “三个点” 的图表,然后选择 “选项”。 (2)点击 “隐私” 选项卡下的“清除”按钮。 然后点击 “刷新” 按钮,即可清除 “最近使用的文件” 。 (3)设置不记录 “最近使用的文件” 。 第…

OpenHarmony测试RS232/RS485串口方法,触觉智能SBC3528工控主板演示

为大家介绍在鸿蒙系统下,没有串口工具的情况下如何测试RS232/RS485,触觉智能SBC3528工控主板演示教大家介绍在OpenHarmony系统,没有串口工具的情况下如何测试RS232/RS485,使用触觉智能SBC3528工控主板演示,搭载了瑞芯微RK3568四核处理器,板载2路RS232+4路隔离RS485,集成…

天虎程序Phone APP下载设置定位失败怎么解决

天虎程序Phone的APP拨号软件怎么下载呢?首先用浏览器扫描二维码,点击下载,然后按照提示安装就可以,这个非常简单。下载后,点击软件界面按####加拨号连接蓝牙,蓝牙连接好后就可以正常使用了。请联系图片上电话或微心 2081003456 索取下载phone程序APP 定位失败更换APP即可…

Express的使用笔记10 给登录接口添加返回token与其它接口进行token校验处理

按照常规,用户登录成功的时候是会返回一个token值,前端就可以将这个token存储到cookie中随后在其他接口使用的时候放置在Headers中进行传递。 实现这个功能,首先需要了解JWT Secret(密钥)与JWT(Token)。 JWT Secret (密钥):这是一个私有的字符串,仅在服务器端使用。 它…

ingsollrang英格索兰IC直流电动拧紧控制器维修

随着智能装配的概念逐渐在行业内推广,质量管理已成为实现智能装配过程中的一个重要环节,许多客户都有着数据记录、扭矩检测的需求,英格索兰的多种拧紧工具配合控制器,可以满足从基本拧紧到质量管理的一系列需求,真正实现高级装配。 一、ingsollrang英格索兰IC直流电动拧紧…