当前位置: 首页 > news >正文

【vue3】vue3.3新特性真香

距离vue3.3发布已经过了一年多(2023.5.11),vue3.3提高开发体验的新特性你用了吗?

组件内部导入复杂类型

3.3之前想在组件内部导入复杂类型做props类型是不支持的。

<script setup lang="ts">import type { People } from '@/types';withDefaults(defineProps<People>(), {name: '张三',age: 18,});
</script><template><div>{{ name }}{{ age }}</div>
</template>

Generic Components

如果组件定义时你不确定使用者需要传入什么样的属性类型,可以根据使用者传入属性值来定组件自定义属性类型,那么Generic Components 必定适合你!!!

  • 组件定义
<script setup lang="ts" generic="T">defineProps<{people: T;}>();
</script><template><div>{{ people }}</div>
</template>
  • 组件使用
<script setup lang="ts">import GenericComponents from '@/components/GenericComponents.vue';
</script><template><GenericComponents :people="{ name: 'wgh', age: '18' }"></GenericComponents><GenericComponents:people="{ name: 'wgh', age: '18', class: '超级一班' }"></GenericComponents>
</template>

defineEmits简写

3.3可以吧defineEmits写成键值对形式,看起来很简洁清晰。

// BEFORE
const emit = defineEmits<{(e: 'foo', id: number): void(e: 'bar', name: string, ...rest: any[]): void
}>()// AFTER
const emit = defineEmits<{foo: [id: number]bar: [name: string, ...rest: any[]]
}>()
  • example
<script setup lang="ts">const emits = defineEmits<{change: [num: string];update: [num: number, ...reset: any[]];}>();
</script><template><div @click="emits('change', 'change')">change</div><div @click="emits('update', 123, 666, 888, 77, 111)">update</div>
</template>
  • 组件使用
<script setup lang="ts">import DefineEmits from '@/components/DefineEmits.vue';const fn = (res, ...reset) => {console.log(res, reset);};
</script><template><define-emits @change="fn" @update="fn" />
</template>

defineModel组件定义双向数据api

给组件添加双向数据绑定可以增加组件易用性,之前组件双向数据绑定都是定义emit事件来实现的。有了这个api就可以不写emit啦,哈哈哈。

<script setup lang="ts">// beforeconst props = defineProps<{cont: number;}>();const emits = defineEmits<{'update:cont': [cont: number];}>();// const add = () => {//   emits('update:cont', props.cont + 1);// };// afterconst num = defineModel('num', {required: true,default: 2,});const add = () => {emits('update:cont', props.cont + 1);num.value++;};
</script><template><div>cont:{{ cont }} | num:{{ num }}</div><button @click="add">++</button>
</template>

是不是写起来方便多了。

vue3.4新特性(组件使用时变量属性同名简写)

vue3.4发布时间是23年12月28,对于开发者来说,主要是defineModel 双向数据绑定api稳定和变量属性同名简写。

  • component
<script setup lang="ts">defineProps<{name: string;age: number;}>();
</script><template><h1>同名简写</h1><div>{{ name }}--{{ age }}</div>
</template>
  • use
<script setup lang="ts">import { ref } from 'vue';import SameNameShorthand from '@/components/Same-nameShorthand.vue';const name = ref('渣渣辉');const age = ref(18);
</script><template><DefineModel v-model:value="name"></DefineModel>
</template>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 为什么现在的LLM都是Decoder only的架构?
  • LeetCode 399. 除法求值
  • ssh 免密登陆服务器故障
  • qs(Query String)查询字符串框架
  • 数据结构_1.1、数据结构的基本概念
  • java mybaits oracle插入返回主键
  • 『功能项目』窗口可拖拽脚本【59】
  • [vulnhub] w1r3s.v1.0
  • 破解 oklink 网站加密数据(升级版)
  • docker仓库
  • NLP 主流应用方向
  • 关于SpringBoot项目使用maven打包由于Test引起的无法正常打包问题解决
  • 【JAVA开源】基于Vue和SpringBoot的甘肃非物质文化网站
  • C#设计模式之访问者模式
  • QT Creator cmake 自定义项目结构, 编译输出目录指定
  • 《剑指offer》分解让复杂问题更简单
  • docker容器内的网络抓包
  • es6
  • java多线程
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Spring声明式事务管理之一:五大属性分析
  • Web Storage相关
  • 前端技术周刊 2019-01-14:客户端存储
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 深度解析利用ES6进行Promise封装总结
  • 深度学习中的信息论知识详解
  • 时间复杂度与空间复杂度分析
  • 树莓派 - 使用须知
  • 因为阿里,他们成了“杭漂”
  • ​决定德拉瓦州地区版图的关键历史事件
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (Java入门)学生管理系统
  • (pycharm)安装python库函数Matplotlib步骤
  • (Python) SOAP Web Service (HTTP POST)
  • (层次遍历)104. 二叉树的最大深度
  • (待修改)PyG安装步骤
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (七)glDrawArry绘制
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (区间dp) (经典例题) 石子合并
  • (未解决)macOS matplotlib 中文是方框
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .jks文件(JAVA KeyStore)
  • .NET 8.0 发布到 IIS
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Core 2.1路线图
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 通过系统影子账户实现权限维持
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET框架
  • .NET中两种OCR方式对比