vue3.4 里面的新特性
vue 的大版本版本已经升级到 3.4,就在写这篇文章的 30 分钟前,最近新版本是 3.4.20,可见 vue 团队的维护工作一直在持续的进行着...(手动点赞) 那么升级的后的新功能有哪些,这篇文章就来分析下 vue3.4.20 的几个最新功能
v-model
v-model 可以在组件上使用以实现双向绑定。
之前版本的写法
App.vue 组件
html
<script setup>
import Child from "./components/Child.vue";
import { ref } from "vue";
const tips = ref(undefined);
</script>
<template>
<h3>parent:{{ tips }}</h3>
<Child v-model="tips" />
</template>
<style scoped></style>
Child 组件
html
<template>
<div>
<h2>{{ msg }}</h2>
<input v-model="msg" />
</div>
</template>
<script setup>
import { ref } from "vue";
const msg = ref("this is a msg");
</script>
<style scoped></style>
child组件里面的默认值如果要生效,父组件的tips要为undefined,为空null|''会覆盖默认值
- 正常显示默认值
bash
const tips = ref(undefined);
bash
const tips = ref("");
- 不显示默认值
### v3.4 版本的写法
xml
从 Vue 3.4 开始,推荐的实现方式是使用 defineModel() 宏:
父组件的没变化,只要是子组件里面有所变化
Child 组件
```html
<template>
<div>
<h3>child props:{{ model }}</h3>
<h3>{{ msg }}</h3>
<input v-model="msg" />
</div>
</template>
```
这里需要注意的,父组件的值不能为 null | '',不然子组件的默认值不会显示出来, 赋默认值的方法
bash
const model = defineModel({
default: "this is a default val"
});
此时,我们将 model 赋值给子组件里面的 input 作为响应数据,更新输入框,我们发现父组件的值会同步变化,且控制台没有报错或者警告信息...这样就没有了之前繁琐的 update 更新 emit 事件操作了
组件的多个 v-model
App.vue
html
<script setup>
import Child from "./components/Child.vue";
import { ref } from "vue";
const tips = ref(undefined);
const title = ref("title");
</script>
<template>
<h3>parent:tips {{ tips }}</h3>
<h3>parent title:{{ title }}</h3>
<Child v-model="tips" v-model:title="title" />
</template>
<style scoped></style>
Child.vue
html
<template>
<div>
<h3>child props:{{ model }}</h3>
<h3>child props:{{ title }}</h3>
<h3>{{ title }}</h3>
<input v-model="title" />
</div>
</template>
<script setup>
import { ref } from "vue";
const msg = ref("this is a msg");
const model = defineModel({
default: "this is a default val",
});
const title = defineModel("title", { default: "title from parent..." });
</script>
<style lang="less" scoped></style>
经过实战测试,页面正常显示运行,没有显示报错日志
还有更多的特性大家可以自己看官网,对实践其他的新特性