关于 Vue 中 h 函数的一些东西

最近在项目上需要一个信息弹窗 , 来显示信息 。一开始只让它弹出了文字 , 而且只有一条信息 。而给我的需求是多条文字和图片,而后我使用了element ui中的 Notification 通知组件来显示 。当然,基础的 Notification 还不行,所以我使用了具有 HTML 片段的 Notification  , 以及搭配 Vue 中的h()函数一起来使用 。
下面是element ui 中给出的 Notification 组件(具有 HTML 片段的 Notification ) 。而要完成我的需求 , 只需在 Notification 的正文内容使用 h() 函数即可 。
1 ElNotification({2title: 'HTML String',3dangerouslyUseHTMLString: true,//是否将 message 属性作为 HTML 片段处理4message: '<strong>This is <i>HTML</i> string</strong>',//正文内容5})当我使用 h() 函数之后:
1 ElNotification({ 2title: 'HTML String',//标题 3type: 'warning',//类型 4offset: 80,//相对屏幕顶部的偏移量 5customClass: 'temperature',//自定义类名 6dangerouslyUseHTMLString: true,//是否将 message 属性作为 HTML 片段处理 7duration: 5000,//显示时间 8message: h('div', [ 9h('img', { src: item[index].images[index], style: { width: '170px', height: '160px', float: 'left' } }),//插入的图片10h('p', { class: 'userName', style: { color: 'orange', display: 'flex', margin: '0 0 0 15px' } }, '人员姓名:' + item[index].userName + ''),//插入的文字11],)代码写完了,接下来就讲讲 h() 函数以及它背后的 VNode (虚拟 DOM 节点 )
什么是 h() 函数?
Vue官方文档是这样解释的:
Vue 提供了一个 h() 函数用于创建 vnodes 。
1 import { h } from 'vue'23 const vnode = h(4'div', // type5{ id: 'foo', class: 'bar' }, // props6[7/* children */8]9 )h() 是 hyperscript 的简称——意思是“能生成 HTML (超文本标记语言) 的 JavaScript” 。这个名字来源于许多虚拟 DOM 实现默认形成的约定 。一个更准确的名称应该是 createVnode(),但当你需要多次使用渲染函数时,一个简短的名字会更省力 。
h() 函数的使用方式非常的灵活:
1 // 除了类型必填以外,其他的参数都是可选的 2 h('div') 3 h('div', { id: 'foo' }) 4 5 // attribute 和 property 都能在 prop 中书写 6 // Vue 会自动将它们分配到正确的位置 7 h('div', { class: 'bar', innerHTML: 'hello' }) 8 9 // props modifiers such as .prop and .attr can be added10 // with '.' and `^' prefixes respectively11 h('div', { '.name': 'some-name', '^width': '100' })1213 // 类与样式可以像在模板中一样14 // 用数组或对象的形式书写15 h('div', { class: [foo, { bar }], style: { color: 'red' } })1617 // 事件监听器应以 onXxx 的形式书写18 h('div', { onClick: () => {} })1920 // children 可以是一个字符串21 h('div', { id: 'foo' }, 'hello')2223 // 没有 props 时可以省略不写24 h('div', 'hello')25 h('div', [h('span', 'hello')])2627 // children 数组可以同时包含 vnodes 与字符串28 h('div', ['hello', h('span', 'hello')])得到的 vnode 为如下形式:
1 const vnode = h('div', { id: 'foo' }, [])23 vnode.type // 'div'4 vnode.props // { id: 'foo' }5 vnode.children // []6 vnode.key // null(完整的 VNode 接口包含其他内部属性,但是强烈建议避免使用这些没有在这里列举出的属性 。这样能够避免因内部属性变更而导致的不兼容性问题 。)
所以总结下来,使用方法(很简单):

    推荐阅读