Vue 创建虚拟DOM元素的几种方式和实际应用。

目录

创建虚拟DOM元素的方式

创建一个简单的元素:

创建一个带有属性的元素:

创建一个带有子元素的元素:

创建一个带有事件监听器的元素:

创建一个Vue组件 

创建一个带Props的组件 

创建一个带Slot的组件 

实际应用


创建虚拟DOM元素的方式

在Vue中创建虚拟DOM的方法是$createElement

$createElement在Vue源码中对应的类型声明是

export interface CreateElement {
  (tag?: string | Component<any, any, any, any> | AsyncComponent<any, any, any, any> | (() => Component), children?: VNodeChildren): VNode;
  (tag?: string | Component<any, any, any, any> | AsyncComponent<any, any, any, any> | (() => Component), data?: VNodeData, children?: VNodeChildren): VNode;
}

可以看到CreateElement有两个构造函数,用于创建虚拟 DOM 元素。它的签名组合非常多,以下是一些可能的例子:

  • 创建一个简单的元素:

this.$createElement('div', 'Hello World')

输出结果:

<div>Hello World</div>
  • 创建一个带有属性的元素:

this.$createElement('div', { class: 'red', style: 'font-size: 16px' }, 'Hello World')

输出结果:

<div class="red" style="font-size: 16px">Hello World</div>
  • 创建一个带有子元素的元素:

this.$createElement('div', [
  this.$createElement('h1', 'Title'),
  this.$createElement('p', 'Content')
])

输出结果:

<div>
  <h1>Title</h1>
  <p>Content</p>
</div>
  • 创建一个带有事件监听器的元素:

this.$createElement('button', {
  on: {
    click: this.handleClick
  }
}, 'Click me')

输出结果:

<button onclick="handleClick">Click me</button>
  • 创建一个Vue组件 

const MyComponent = Vue.component('my-component', {  
  props: ['msg'],  
  template: '<span>{
  { msg }}</span>'  
})  
  
vm.$createElement(MyComponent, {  
  props: { msg: 'Hello, world!' }  
})
  • 创建一个带Props的组件 

const MyComponent = Vue.component('my-component', {  
  props: ['msg'],  
  template: '<span>{
  { msg }}</span>'  
})  
  
vm.$createElement(MyComponent, {  
  props: { msg: 'Hello, world!' },  
  class: { 'my-class': true },  
  attrs: { id: 'my-id' }  
}, 'Hello, world!')
  • 创建一个带Slot的组件 

const MyComponent = Vue.component('my-component', {  
  template: `<div><slot></slot></div>`  
})  
  
vm.$createElement(MyComponent, {}, [  
  vm.$createElement('span', {}, 'Child element 1'),  
  vm.$createElement('span', {}, 'Child element 2')  
])

以上只是一些可能的签名组合举例,实际上,$createElement 方法的签名非常灵活,允许使用嵌套对象和数组来创建复杂的虚拟 DOM 结构。可以根据具体的需求进行更多的组合和定制。

实际应用

使用element-ui的this.$confrim来自定义一个带有指定格式的提示弹框

const h = this.$createElement
this.$confirm(
  h('div', [
    h('p', '虚拟DOM的构造函数'),
    h('p', '执行此操作前,请确认:'),
    h('p', '确定要创建虚拟DOM吗?'),
    h('p', '是否确认完成上述操作,并继续提交。')
  ]), '提示', {
  confirmButtonText: '确定',
  cancelButtonText: '取消',
  type: 'warning',
})

可以看到这样的方式非常简单,代码也更具有可读性。 

运行结果展示: 

相关推荐

  1. React-创建虚拟Dom方法

    2023-12-08 15:14:04       36 阅读
  2. Vue3: 获取元素DOM方法

    2023-12-08 15:14:04       49 阅读
  3. 【DevOps】OpenVPN 实现分流方法实战

    2023-12-08 15:14:04       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-08 15:14:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-08 15:14:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-08 15:14:04       82 阅读
  4. Python语言-面向对象

    2023-12-08 15:14:04       91 阅读

热门阅读

  1. LeeCode每日刷题12.8

    2023-12-08 15:14:04       50 阅读
  2. 附录1、vuepress中的Markdown语法

    2023-12-08 15:14:04       63 阅读
  3. 利用 Python 进行数据分析实验(三)

    2023-12-08 15:14:04       53 阅读
  4. 利用 Python 进行数据分析实验(五)

    2023-12-08 15:14:04       57 阅读
  5. docker网络

    2023-12-08 15:14:04       46 阅读
  6. VBA 数组写入ACCESS

    2023-12-08 15:14:04       62 阅读
  7. 数据结构的存储方式

    2023-12-08 15:14:04       55 阅读
  8. Kotlin(十三) 延迟初始化和密封类

    2023-12-08 15:14:04       58 阅读