vue 用 h() 函数创建 Vnodes

前言

Vue 提供了一个 h() 函数用于创建 vnodes。

h() 是 hyperscript 的简称——意思是“能生成 HTML (超文本标记语言) 的 JavaScript”。

const vnode = h(
  'div', // type
  {
    id: 'foo', class: 'bar' }, // props
  key: '001', // key
  [
    /* children */
  ]
)

【注意】组件树中的 vnodes 必须是唯一的。

一、h() 函数的基本使用方式

import {
    h } from 'vue'

// 除了类型必填以外,其他的参数都是可选的
h('div')
h('div', {
    id: 'foo' })

// attribute 和 property 都能在 prop 中书写
// Vue 会自动将它们分配到正确的位置
h('div', {
    class: 'bar', innerHTML: 'hello' })

// 像 `.prop` 和 `.attr` 这样的的属性修饰符
// 可以分别通过 `.` 和 `^` 前缀来添加
h('div', {
    '.name': 'some-name', '^width': '100' })

// 类与样式可以像在模板中一样
// 用数组或对象的形式书写
h('div', {
    class: [foo, {
    bar }], style: {
    color: 'red' } })

// 事件监听器应以 onXxx 的形式书写
h('div', {
    onClick: () => {
   } })

// children 可以是一个字符串
h('div', {
    id: 'foo' }, 'hello')

// 没有 props 时可以省略不写
h('div', 'hello')
h('div', [h('span', 'hello')])

// children 数组可以同时包含 vnodes 与字符串
h('div', ['hello', h('span', 'hello')])

二、h() 函数的进阶使用方式

1、条件渲染

h('div', [ok.value ? h('div', 'yes') : h('span', 'no')])

2、列表渲染

h(
  'ul',
  // 假设‘items’是一个具有数组值的 ref
  items.value.map(({
    id, text }) => {
   
    return h('li', {
    key: id }, text)
  })
)

3、事件

h(
  'button',
  {
   
    onClick: (event) => {
   },
    // 对于事件和按键修饰符,可以使用 withModifiers 函数
    onDbclick: withModifiers(() => {
   }, ['stop'])
  },
  'click me'
)

4、使用插槽

import {
    h } from 'vue'

const vnode = h(
  'SelfComponent',
  // 默认插槽:
  // <div><slot /></div>
  // <div>{slots.default()}</div>
  h('div', slots.default()),

  // 具名插槽
  // <div><slot name="footer" :text="message" /></div>
  // <div>{slots.footer({ text: props.message })}</div>
  h(
    'div',
    slots.footer({
   
      text: props.message
    })
  )
)




【参考文章】
vue 官网之“渲染函数 & JSX”

相关推荐

  1. vue h() 函数创建 Vnodes

    2024-01-07 23:30:02       65 阅读
  2. Vue 】辅助创建VNodeh函数

    2024-01-07 23:30:02       36 阅读
  3. vueh() 函数

    2024-01-07 23:30:02       33 阅读
  4. 深入理解 Vue.js 中的 `h` 函数:虚拟 DOM 创建指南

    2024-01-07 23:30:02       198 阅读
  5. C 语言string.h常见函数

    2024-01-07 23:30:02       43 阅读

最近更新

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

    2024-01-07 23:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-07 23:30:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-07 23:30:02       82 阅读
  4. Python语言-面向对象

    2024-01-07 23:30:02       91 阅读

热门阅读

  1. Dart教程(快速入门2024完整版)

    2024-01-07 23:30:02       75 阅读
  2. 2024年1月7日学习总结

    2024-01-07 23:30:02       57 阅读
  3. vue组件通信的方式

    2024-01-07 23:30:02       63 阅读
  4. WordPress函数get_post()

    2024-01-07 23:30:02       47 阅读
  5. docker安装rabbitmq

    2024-01-07 23:30:02       50 阅读
  6. Go语言范围Range

    2024-01-07 23:30:02       59 阅读
  7. 【http和https】 简单入门了解

    2024-01-07 23:30:02       60 阅读
  8. 决策树(Decision Trees)

    2024-01-07 23:30:02       67 阅读
  9. 62、python - 全手写搭建 resnet50 神经网络

    2024-01-07 23:30:02       57 阅读