Vue.js中h函数生成VNode时的属性归一化与规范化流程

云伟小哥_9096

云伟小哥_9096

2026-04-11

503人浏览

原创

vue.js 的 h 函数对属性执行归一化处理:props 与 attrs 按组件声明自动分离;class/style 深度合并并统一格式;事件监听器标准化(onxxx→小写键+修饰符解析);ref/key/modelvalue 等特殊 prop 被优先拦截转换。

vue.js中h函数生成vnode时的属性归一化与规范化流程

Vue.js 中 h 函数生成 VNode 时,并不会直接把传入的属性原样塞进 VNode 对象,而是经过一套明确的属性归一化(normalization)与规范化(normalization + normalization-aware handling)流程。这个过程决定了 props、attrs、事件、class、style 等如何被识别、合并、过滤和挂载,直接影响组件行为与渲染结果。

props 与 attrs 的自动分离

当调用 h(Component, { onClick: handler, id: 'foo', disabled: true }) 时,Vue 会依据组件的 props 定义(或运行时推导)判断哪些属性属于显式声明的 prop,其余则归入 attrs:

  • 若组件定义了 props: ['id', 'disabled'],则 id 和 disabled 进入 props 字段,onClick 被识别为事件监听器,进入 props.on 或 props.onClick(取决于 Vue 版本与写法)
  • 若组件未声明 id,但传入了 id,它将落入 attrs.id,并默认透传到根元素(除非禁用 inheritAttrs: false)
  • 原生 DOM 事件(如 onClick、onInput)会被自动转为小写 onclick 并作为原生监听器绑定;而自定义事件(如 onUpdate:modelValue)保留 PascalCase 形式,供 emit 触发

class 与 style 的深度合并策略

class 和 style 是特殊处理的属性,支持多种格式输入并自动归一化为统一结构:

vue-composition-api-best-practices
vue-composition-api-best-practices

Vue 3 组合式 API 与

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 17.2万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.5万人学习