前言:element ui 中有些 demo 使用了 vue 的 VNode,但是 demo 毕竟不全,所以想要了解 VNode 到底是什么,如何写出符合自己业务的代码。

vue 官网介绍:渲染函数 & JSX

createElement 函数

  这里涉及到 createElement 函数。这个函数的返回值就是一个 VNode 对象。

  createElement 到底会返回什么呢?其实不是一个实际的 DOM 元素。它更准确的名字可能是 createNodeDescription,因为它所包含的信息会告诉 Vue 页面上需要渲染什么样的节点,及其子节点。我们把这样的节点描述为“虚拟节点 (Virtual Node)”,也常简写它为“VNode”。“虚拟 DOM”是我们对由 Vue 组件树建立起来的整个 VNode 树的称呼。

VNode

  虚拟 DOM。Vue 通过建立一个虚拟 DOM 对真实 DOM 发生的变化保持追踪。

通过 createElement 函数来创建自定义的 VNode

  使用 JSX 语法。

  接下来你需要熟悉的是如何在 createElement 函数中生成模板。这里是 createElement 接受的参数:

// @returns {VNode}
createElement(// {String | Object | Function}// 一个 HTML 标签字符串,组件选项对象,或者// 解析上述任何一种的一个 async 异步函数。必需参数。'div',// {Object}// 一个包含模板相关属性的数据对象// 你可以在 template 中使用这些特性。可选参数。
  {// (详情见下一节)
  },// {String | Array}// 子虚拟节点 (VNodes),由 `createElement()` 构建而成,// 也可以使用字符串来生成“文本虚拟节点”。可选参数。
  ['先写一些文字',createElement('h1', '一则头条'),createElement(MyComponent, {props: {someProp: 'foobar'}})]
)

数据对象如何写?(如怎么添加点击事件等)

  在 VNode 数据对象中,下列属性名是级别最高的字段。该对象也允许你绑定普通的 HTML 特性,就像 DOM 属性一样,比如 innerHTML (这会取代 v-html 指令)。

{// 和`v-bind:class`一样的 API// 接收一个字符串、对象或字符串和对象组成的数组'class': {foo: true,bar: false},// 和`v-bind:style`一样的 API// 接收一个字符串、对象或对象组成的数组
  style: {color: 'red',fontSize: '14px'},// 普通的 HTML 特性
  attrs: {id: 'foo'},// 组件 props
  props: {myProp: 'bar'},// DOM 属性
  domProps: {innerHTML: 'baz'},// 事件监听器基于 `on`// 所以不再支持如 `v-on:keyup.enter` 修饰器// 需要手动匹配 keyCode。
  on: {click: this.clickHandler},// 仅用于组件,用于监听原生事件,而不是组件内部使用// `vm.$emit` 触发的事件。
  nativeOn: {click: this.nativeClickHandler},// 自定义指令。注意,你无法对 `binding` 中的 `oldValue`// 赋值,因为 Vue 已经自动为你进行了同步。
  directives: [{name: 'my-custom-directive',value: '2',expression: '1 + 1',arg: 'foo',modifiers: {bar: true}}],// 作用域插槽格式// { name: props => VNode | Array<VNode> }
  scopedSlots: {default: props => createElement('span', props.text)},// 如果组件是其他组件的子组件,需为插槽指定名称slot: 'name-of-slot',// 其他特殊顶层属性key: 'myKey',ref: 'myRef',// 如果你在渲染函数中向多个元素都应用了相同的 ref 名,// 那么 `$refs.myRef` 会变成一个数组。refInFor: true
}

使用举例

element ui 的Notification通知如何加 a 标签和按钮,并弹多个

转载于:https://www.cnblogs.com/yuxiaole/p/9353031.html

vue VNode如何使用,是什么东西?相关推荐

  1. Vue.js TypeScript 支持

    TypeScript 支持 在 Vue 2.5.0 中,我们大大改进了类型声明以更好地使用默认的基于对象的 API.同时此版本也引入了一些其它变化,需要开发者作出相应的升级.阅读博客文章了解更多详情. ...

  2. Vue CLI 3 可以使用 TypeScript 生成新工程

    TypeScript 支持 在 Vue 2.5.0 中,我们大大改进了类型声明以更好地使用默认的基于对象的 API.同时此版本也引入了一些其它变化,需要开发者作出相应的升级.阅读博客文章了解更多详情. ...

  3. (建议收藏)第一人称视角带你走进 Vue 源码世界

    点击上方关注 前端技术江湖,一起学习,天天进步 前言 本文不引战,成熟的人应该脱离框架的范畴,而不是纠结谁更好或者谁更不好.有道是黑猫白猫,抓到老鼠就是好猫. 所以本文会带大家读源码.简单易懂,大佬小 ...

  4. 「建议收藏」第一人称视角带你走进 Vue 源码世界

    前言 本文不引战,成熟的人应该脱离框架的范畴,而不是纠结谁更好或者谁更不好.有道是黑猫白猫,抓到老鼠就是好猫. 所以本文会带大家读源码.简单易懂,大佬小白都能看明白.并收获益处. 从 new 一个 V ...

  5. vue.js 2.x教程

    教程 基础 安装 兼容性 Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性.但它支持所有兼容 ECMAScript 5 的浏览器. 更新日志 ...

  6. 2021年最新vue面试题及答案

    1.什么是MVVM框架?它适用于哪些场景? MVVM框架是一个 Model-View-View Model框架,其中 ViewModel连接模型Model)和视图(View). 在数据操作比较多的场景 ...

  7. Vue.js ( 比JQuery更加精简的前端框架)

    Vue.js简介 什么是  Vue 什么是 Vue? 考虑这个需求: 我们要把一个 json对象的数据,显示到一个元素上去. 如果不使用 Vue, 那么就会用到 JS 或者 JQuery,通过操作 H ...

  8. vue颜色选择器_如何制作? Vue的颜色选择器!

    vue颜色选择器 by ZAYDEK 由ZAYDEK 如何制作? Vue的颜色选择器! (How to make a ? color picker with Vue!) 注意:颜色看起来可能比实际颜色 ...

  9. vue 保存全局变量_Vue+Typescript起手式

    TypeScript是什么? TypeScript 是一种由微软开发的自由和开源的编程语言.它是 JavaScript 的一个超集,TypeScript 在 JavaScript 的基础上添加了可选的 ...

最新文章

  1. 网站架构之统一数据服务平台技术
  2. java基础 知识点
  3. AI:2020年7月10日世界人工智能大会WAIC青少年人工智能创新发展论坛《人工智能从娃娃抓起》
  4. Ladda – 把加载提示效果集成到按钮中,提升用户体验
  5. 笔记本控制机器人方法
  6. 在没有适当上下文的情况下引发异常是一种不良习惯
  7. oracle成本模块培训,Oracle App 培训笔记(5) -- 成本管理模块表结构整理 续
  8. linux入门怎么学?
  9. TCP之keepalive机制的应用场景
  10. linux input设备冲突,linux input设备怎么固定event handler
  11. obspy中文教程(六)
  12. 单片机课程设计题目及要求——电风扇模拟控制系统(仿真图加代码加原理图都有)
  13. 重磅!腾讯优图29篇论文入选顶会ECCV 2022
  14. Docker——阿里云镜像加速
  15. java中文分词的简单实现
  16. Xposed框架搭建及模块编写相关问题
  17. 用google搜索图书的方法
  18. linux logo程序设计,教你在线设计一个简单美观的LOGO
  19. P5236 【模板】静态仙人掌(仙人掌圆方树)
  20. 金融是不是一群不事生产的人,对社会毫无贡献的人,互相对赌的零和游戏?

热门文章

  1. mo-quarter-picker:基于 Vue2 和 ElementUI 的季度范围选择器
  2. 【组合数学】36军官问题
  3. android 触摸屏监控,如何实现在安卓手机上对PLC进行监控-工业支持中心-西门子中国...
  4. go work 工作区
  5. java火车票售票系统_基于java的火车票售票系统,界面Swing
  6. CUDA 10.2及CUDNN下载
  7. Linux安装谷歌浏览器chrome
  8. 【保姆级·创建对象】如何通过Supplier创建对象
  9. MISRA C (3)
  10. STM32之中断的使用