Vue 3 迁移策略笔记—— 第21节:渲染函数 API

前言

本笔记主要基于官方文档《迁移策略——渲染函数 API》编写。如有理解出入,请以官方文档为主。建议您以官方文档为主,本文为辅。这样您可以“以自己为主”审视的阅读,从而不被我的观点带偏。

知识储备:

概述

渲染函数的变动不会影响到使用<template> 编写的组件。

本次更改概括如下:

  • h现在全局导入,而不是作为参数传递给渲染函数
  • 在有状态组件和功能组件之间更一致的呈现函数参数
  • vnode 现在有一个扁平的 prop 结构

render 函数参数

在 Vue 2.x ,render 函数自动接收 h 函数(它是 createElement 的常规别名)作为参数:

// Vue 2 渲染函数示例
export default {
  render(h) {
    return h('div')
  }
}

但是在 Vue 3.x,h 函数改为需要收到全局导入了:

// Vue 3 渲染函数示例
import { h } from 'vue'

export default {
  render() {
    return h('div')
  }
}

渲染函数签名更改

在 Vue 2.x 中,render 函数自动接收诸如 h 之类的参数。

// Vue 2 渲染函数示例
export default {
  render(h) {
    return h('div')
  }
}

在 Vue 3.x 中,由于 render 函数不再接收任何参数,它将主要用于 setup() 函数内部。这还有一个好处:可以访问作用域中声明的响应式状态和函数,以及传递给 setup() 的参数。

import { h, reactive } from 'vue'

export default {
  setup(props, { slots, attrs, emit }) {
    const state = reactive({
      count: 0
    })

    function increment() {
      state.count++
    }

    // 返回render函数
    return () =>
      h(
        'div',
        {
          onClick: increment
        },
        state.count
      )
  }
}

有关 setup() 更多知识点,可参考《组合式 API 指南

VNode Props 结构调整

在 Vue 2.x 中,domProps 包含 VNode props 中的嵌套列表:

// 2.x
{
  class: ['button', 'is-outlined'],
  style: { color: '#34495E' },
  attrs: { id: 'submit' },
  domProps: { innerHTML: '' },
  on: { click: submitForm },
  key: 'submit-button'
}

到了 Vue 3.x,整个 VNode props 结构是趋于扁平化。上面的例子,下面是它现在的样子:

// 3.x 语法
{
  class: ['button', 'is-outlined'],
  style: { color: '#34495E' },
  id: 'submit',
  innerHTML: '',
  onClick: submitForm,
  key: 'submit-button'
}

想要更加细致的了解Vue 3.x render 函数,可参考《渲染函数


本系列目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值