vue3.4(灌篮高手)新特性介绍和体验

Vue3.4更新带来了显著性能提升,如两倍速度的模板解析器和精准的反应式系统。defineModel宏简化了双向数据绑定,而v-bind的语法糖提供了更简洁的写法。此外,计算属性效率提高,避免了不必要的渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简要介绍

此版本包括一些实质性的内部改进 - 最引人注目的是重写的模板解析器,速度提高了 2 倍,以及重构的反应式系统,使效果触发更加准确和高效。它还包含了许多API的质量改进,包括defineModel的稳定性和绑定道具时新的同名简写。-- vue3.4(灌篮高手)

新的语法糖

defineModel 宏(稳定可用)

介绍: 使用该宏可以用于声明可通过 v-model 父组件使用的双向绑定 prop。

vue3.4 以前我们定义父子组件通过v-model进行数据双向绑定常常需要做以下步骤:

  1. 在子组件内定义一个名为modelValue的prop
  2. 在子组件内定义一个名为update:modelValue的emit

代码如下所示:需要通过emit进行数据传递,触发父组件的变量的修改,显得非常繁琐。

<script setup lang="ts">
const props = defineProps(['modelValue'])
const emit = defineEmits(['update:modelValue'])
</script>

<template>
  <input
    :value="props.modelValue"
    @input="emit('update:modelValue', $event.target.value)"
  />
</template>

vue3.4以后,我们直接通过defineModel命令简化操作,父组件操作不变,还是通过v-model进行绑定,而在子组件内我们只需要通过 defineModel这个命令定义变量,之后修改就像操作ref定义的变量一般简单。
其实这个宏的本质就是一个语法糖,对语法的简写形式。
它在子组件内 默认定义了一个名为modelValue的prop

子组件

<template>
<div>{{ model }}</div>
<button @click="changeModel">加一</button>
</template>


<script setup lang="ts">
const model = defineModel({type: Number, default: 0})
const changeModel = () => {
    console.log(model.value);
    model.value++
}
</script>

父组件

<script setup lang="ts">
import Child from './components/Child.vue'
import { ref } from 'vue'
const count = ref(0)
</script>

<template>
<Child  v-model="count"/>
</template>

对于definedModel更多配置和详情和查看changeModelAPI

v-bind 语法糖

这主要是在绑定的属性名和我们脚本中定义的变量名一致的情况下,绑定的=右侧的变量名可以省略不写,如下代码:

vue3.4以上,超级简洁写法

<template>
    <img :src :alt>
</template>


<script setup lang="ts">
import {ref, reactive} from 'vue'
const src = ref('https://picsum.photos/200/300')
const alt = ref('alt')
</script>

在这里插入图片描述

vue3.4以下,不能省略

<template>
    <img :src="src" :alt="alt">
</template>


<script setup lang="ts">
import {ref, reactive} from 'vue'
const src = ref('https://picsum.photos/200/300')
const alt = ref('alt')
</script>

其他特性

计算属性计算效率 ↑

在vue3.4以后版本中,只要值是一样没有发生变化的,那么watchEffect不会执行回调。

<script setup lang="ts">
import { ref, computed, watchEffect } from 'vue'
const show = ref(true)
const content =  ref('hello')
const num = ref(0)
const val = computed(() => {
  console.log('计算属性调用了');
  return num.value % 2 === 0 ? '偶数' : '奇数'
})
const toggle = () => {
  console.log('触发修改');
  num.value = 2
}
watchEffect(() => {
  console.log('watchEffect', val.value);
})
</script>

<template>
  <button @click="toggle">变换</button>
  <div style="color: red;">{{ val }}</div>
</template>

代码执行结果:
代码执行结果

在vue3.4一下版本中,watchEffect在值相同时会多执行一次回调。

在这里插入图片描述

这一特性可以减少没必要的组件重复渲染

模板解析器 ↑

以前,Vue 使用递归下降解析器,它依赖于许多正则表达式和前瞻搜索。新的解析器使用基于 htmlparser2 中的分词器的状态机分词器,它只遍历整个模板字符串一次。其结果是,对于所有大小的模板,解析器的速度始终是其两倍。-- vue新特性介绍

废弃功能(jsx)

参考:废弃内容

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值