当前位置: 首页 > news >正文

Vue3 渲染函数 API(五)

h()

h 函数用于创建并返回一个虚拟节点(VNode)

h(
tag, // HTML 标签名、组件对象或异步组件函数
data, // 一个包含组件的props/attrs/domProps/on 等的对象
children // 子虚拟节点 (VNodes),由 h()构建而成, // 也可以使用字符串来生成“文本虚拟节点”
)

import { h, createApp } from 'vue'  const MyComponent = {  render() {  return h('div', {  class: 'my-class',  onClick: () => console.log('Clicked!'),  }, [  h('span', 'Hello, '),  h('strong', 'Vue 3!'),  ])  }  
}  createApp(MyComponent).mount('#app')

mergeProps()

  • mergeProps 并不是一个直接暴露给开发者的函数。然而,在 Vue 的内部实现中,mergeProps 确实被用来合并来自不同来源的属性(props)和属性数据(attributes),特别是当使用高阶组件(Higher-Order Components, HOCs)或组件组合(Composition)时。
  • 虽然开发者通常不需要直接调用 mergeProps,但了解它的工作原理可以帮助你更好地理解 Vue 的渲染过程。
  • mergeProps 的主要作用是将多个属性对象合并为一个单一的属性对象。在 Vue 的上下文中,这通常涉及将组件的 props、attrs、class、style 等合并到一个最终的属性对象中,以便在创建虚拟 DOM 节点(VNode)时使用。

cloneVNode()

克隆一个 vnode。

  • 返回一个克隆的 vnode,可在原有基础上添加一些额外的 prop。
  • Vnode 被认为是一旦创建就不能修改的,你不应该修改已创建的 vnode 的 prop,而应该附带不同的/额外的 prop 来克隆它。
  • Vnode 具有特殊的内部属性,因此克隆它并不像 object spread 一样简单。cloneVNode() 处理了大部分这样的内部逻辑。

isVNode()

判断一个值是否为 vnode 类型。

resolveComponent()

按名称手动解析已注册的组件。

  • 为了能从正确的组件上下文进行解析,resolveComponent() 必须在setup() 或渲染函数内调用。
  • 如果组件未找到,会抛出一个运行时警告,并返回组件名字符串。
import { h, resolveComponent } from 'vue'export default {setup() {const ButtonCounter = resolveComponent('ButtonCounter')return () => {return h(ButtonCounter)}}
}

resolveDirective()

按名称手动解析已注册的指令。

  • 为了能从正确的组件上下文进行解析,resolveDirective() 必须在setup() 或渲染函数内调用。
  • 如果指令没有找到,会抛出一个运行时警告,并返回 undefined。

withDirectives()

用于给 vnode 增加自定义指令。
用自定义指令包装一个现有的 vnode。第二个参数是自定义指令数组。每个自定义指令也可以表示为 [Directive, value, argument, modifiers] 形式的数组。如果不需要,可以省略数组的尾元素。

import { h, withDirectives } from 'vue'// 一个自定义指令
const pin = {mounted() {/* ... */},updated() {/* ... */}
}// <div v-pin:top.animate="200"></div>
const vnode = withDirectives(h('div'), [[pin, 200, 'top', { animate: true }]
])

withModifiers()

用于向事件处理函数添加内置 v-on 修饰符。

import { h, withModifiers } from 'vue'const vnode = h('button', {// 等价于 v-on:click.stop.preventonClick: withModifiers(() => {// ...}, ['stop', 'prevent'])
})

相关文章:

  • 基于ensp的园区网络搭建综合实验
  • Apollo9.0 PNC源码学习之Control模块(二)
  • 【系统学C++】二、从C语言到C++(二)
  • Java应届第一年规划
  • javaFX为例的MVC案例
  • 宽睿数字平台兼容TDengine 等多种数据库,提供行情解决方案
  • Ansible——stat模块
  • java线程变量共享
  • 定时清理Linux服务器缓存shell脚本
  • 绘唐官网绘唐科技
  • mysql中定时器的使用
  • cve_2014_3120-Elasticsearch-rce-vulfocus靶场
  • 初始化css
  • 【回调函数】
  • 开源VisualFbeditor中文版,vb7 IDE,VB6升级64位跨平台开发安卓APP,Linux程序
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Android框架之Volley
  • angular组件开发
  • Apache的基本使用
  • HashMap ConcurrentHashMap
  • HTTP中GET与POST的区别 99%的错误认识
  • Iterator 和 for...of 循环
  • jquery ajax学习笔记
  • k8s 面向应用开发者的基础命令
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Python学习之路13-记分
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • yii2中session跨域名的问题
  • 对象管理器(defineProperty)学习笔记
  • 力扣(LeetCode)357
  • 如何胜任知名企业的商业数据分析师?
  • 如何实现 font-size 的响应式
  • 使用Gradle第一次构建Java程序
  • 突破自己的技术思维
  • 推荐一个React的管理后台框架
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​ubuntu下安装kvm虚拟机
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #、%和$符号在OGNL表达式中经常出现
  • #WEB前端(HTML属性)
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (k8s)kubernetes 部署Promehteus学习之路
  • (蓝桥杯每日一题)love
  • (十一)图像的罗伯特梯度锐化
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .htaccess 强制https 单独排除某个目录
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net打印*三角形
  • .Net转前端开发-启航篇,如何定制博客园主题
  • .vue文件怎么使用_我在项目中是这样配置Vue的