Vue 3 相对于 Vue2,模板和组件的一些变化

news2024/11/24 14:07:13

目录

  • 1,模板的变化
    • 1,v-model
      • vue2
      • vue3
    • 2,v-if 和 v-for
    • 3,key
      • v-for
      • v-if
    • 4,Fragment
  • 2,组件的变化
    • 1,Teleport
    • 2,异步组件

1,模板的变化

1,v-model

vue2

对组件使用双向绑定时,有2种方式

  1. v-model,默认会绑定属性 value 和事件 input
<ChildComponent :value="myTitle" @input="myTitle = $event" />
<!-- 简写为 -->
<ChildComponent v-model="myTitle" />
  1. async 修饰符
<ChildComponent :title="myTitle" @update:title="myTitle = $event" />
<!-- 简写为 -->
<ChildComponent :title.sync="myTitle" />

vue3

做了修改,

  1. v-model 绑定的属性 value --> modelValue,事件input --> update:modelValue
<ChildComponent :modelValue="myTitle" @update:modelValue="myTitle = $event" />
<!-- 简写为 -->
<ChildComponent v-model="myTitle" />
  1. 删除了async 修饰符,该功能由 v-model 的参数替代。
<ChildComponent :title="myTitle" @update:title="myTitle = $event" />
<!-- 简写为 -->
<ChildComponent v-model:title="myTitle" />
  1. 允许自定义v-model修饰符。官网参考
<!-- 父组件 -->
<template>
  <ChildComponent v-model.cap="data1" v-model:title.capitalize="data2" />
</template>

<script setup>
import { ref, reactive } from "vue";
import ChildComponent from "./components/ChildComponent.vue";

const data1 = ref(false);
const data2 = reactive({ a: 1, b: 2 });
</script>
<!-- 子组件 -->
<script setup>
const props = defineProps({
  modelValue: Boolean,
  title: Object,
  modelModifiers: { default: () => ({}) }, // v-model 默认的修饰符对象。
  titleModifiers: { default: () => ({}) }, // v-model 有参数时,修饰符对象为 arg + "Modifiers"
});
console.log(props.modelModifiers); // {cap: true}
console.log(props.titleModifiers); // {capitalize: true}
</script>

2,v-if 和 v-for

vue2 和 vue3 都不推荐同时使用 v-ifv-for

优先级:

  • vue2:v-for > v-if。官网参考
  • vue3:v-for < v-if。官网参考

3,key

v-for

当使用<template>进行v-for循环时:

  • vue2 的 key 需要放到子元素上。
  • vue3 的 key 需要放到 <template> 上。
<!-- vue2 -->
<template v-for="todo in todos">
  <li :key="todo.name">{{ todo.name }}</li>
</template>
<!-- vue3 -->
<template v-for="todo in todos" :key="todo.name">
  <li>{{ todo.name }}</li>
</template>

v-if

当使用 v-if v-else-if v-else分支的时:

  • vue2 需要指定 key 才能保证唯一。
  • vue3 不再需要指定key值,因为会自动给每个分支一个唯一的key

使用如下代码举例

<template>
  <div>
    <div v-if="showAccount">
      <label for="">账号</label>
      <input type="text" name="" id="" />
    </div>
    <div v-else>
      <label for="">密码</label>
      <input type="text" name="" id="" />
    </div>
    <button @click="showAccount = !showAccount">切换</button>
  </div>
</template>

vue2 的效果

在这里插入图片描述

vue3 的效果

在这里插入图片描述

vue2 想实现一样的效果,就得给 v-if v-else 分支添加唯一 key 才行。

4,Fragment

vue3现在允许组件出现多个根节点。

<!-- vue2 -->
<template>
  <div>
    <h1>标题1</h1>
    <h2>标题2</h2>
  </div>
</template>
<!-- vue3 -->
<template>
  <h1>标题1</h1>
  <h2>标题2</h2>
</template>

2,组件的变化

1,Teleport

官网参考

是 vue3 的内置组件。该组件的子元素将被渲染到指定 DOM 元素中(使用 to 指定)。

to 可以是 css 选择器字符串,也可以是 DOM 元素对象。

经典例子:Dialog 弹窗一般都会渲染到 body 元素下。

<template>
  <div>
    <button @click="open = true">Open Modal</button>
    <Teleport to="body">
      <div v-if="open">
        <p>dialog</p>
        <button @click="open = false">Close</button>
      </div>
    </Teleport>
  </div>
</template>

<script setup>
import { ref } from "vue";

const open = ref(false);
</script>

2,异步组件

参考这篇文章


以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1183408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c语言初学者用vs还是vscode?

c语言初学者用vs还是vscode? 看是科班还是自学&#xff0c;一般学校会有要求的编译软件&#xff0c;在这两者之间&#xff0c;用VS的居多&#xff0c;一个可能的原因是VS不用自己装环境。 最近很多小伙伴找我&#xff0c;说想要一些 c语言的资料&#xff0c;然后我根据自己从…

Rust核心功能之一(所有权)

目录 1、什么是所有权&#xff1f; 1.1 所有权规则 1.2 变量作用域 1.3 String 类型 1.4 内存与分配 变量与数据交互的方式&#xff08;一&#xff09;&#xff1a;移动 变量与数据交互的方式&#xff08;二&#xff09;&#xff1a;克隆 只在栈上的数据&#xff1a;拷贝…

【C++20】模块

模块 C语言从一开始便继承了C语言的include头文件机制&#xff0c;通过包含头文件的方式来引用其他组件的代码&#xff0c;这些头文件通常包含了该组件相关的接口声明。但使用头文件通常伴有如下问题&#xff1a; 不够清晰不够清晰同名符号覆盖问题 C20提供了模块特性&#…

本地生活新赛道-视频号团购怎么做?

目前有在做实体行业的商家一定要看完&#xff0c;只要你进入了这个本地生活新的赛道&#xff0c;那你的生意自然会源源不断&#xff0c;那这个赛道又是什么呢&#xff1f; 这就是十月份刚刚上线的视频号团购项目&#xff0c;开通团购之后&#xff0c;就可以通过发短视频&#…

排序:堆排序(未完待续)

文章目录 排序一、 排序的概念1.排序&#xff1a;2.稳定性&#xff1a;3.内部排序&#xff1a;4.外部排序&#xff1a; 二、插入排序1.直接插入排序 二、插入排序堆排序 排序 一、 排序的概念 1.排序&#xff1a; 一组数据按递增/递减排序 2.稳定性&#xff1a; 待排序的序列…

postman中文乱码

在header中添加这两个&#xff1a; Content-Type application/json;charsetUTF-8 Accept application/json;charsetUTF-8

『昆仑天工』4款AI产品开源!提供API对接!

在文章开篇&#xff0c;小圈先介绍下 昆仑万维 公司旗下的AI大模型**『天工』**&#xff0c;它是由昆仑万维自研的双千亿级大语言模型&#xff0c; 也是国内首个对标ChatGPT的双千亿级大语言模型&#xff0c;可满足文案创作、知识问答、代码编程、逻辑推演、数理推算等需求。 …

自制宏正(ATEN)KVM CS1708i固件升级线

因为宏正 CS1708i KVM年代相对久远&#xff0c;最近通过Web进行远程管理时发现页面不支持最新的EDGE浏览器&#xff0c;官方有较新的固件&#xff0c;但是需要专用的RJ11接头的升级串口线才能进行升级。网上目前无法买到&#xff0c;在网上找到对应的资料&#xff0c;用RJ11 4P…

ansible第一天

ansible 第一天 以上主机使用rhel-8.2-x86_64-dvd.iso镜像&#xff0c;配置ip、yum源&#xff0c;关闭防火墙和selinux规则 安装中文包&#xff0c;重启生效 [rootcontrol ~]# yum -y install langpacks-zh_CN.noarch && reboot 配置名称解析 [rootcontrol ~]# echo…

拓展企业客户群:如何使用企业联系方式查询API帮助在社交媒体上寻找潜在客户

前言 在当今竞争激烈的商业环境中&#xff0c;拓展企业客户群已经成为许多企业的首要任务之一。在这种情况下&#xff0c;使用企业联系方式查询API可以帮助企业在社交媒体上寻找潜在客户。本文将探讨如何使用企业联系方式查询API拓展企业客户群。 企业联系方式查询API简介 首…

linux rsyslog介绍

Rsyslog网址&#xff1a;https://www.rsyslog.com/ Rsyslog is the rocket-fast system for log processing. It offers high-performance, great security features and a modular design. While it started as a regular syslogd, rsyslog has evolved into a kind of swis…

【物联网】继续深入探索ADC模拟转数字的原理——Flash ADC流水线ADC逐次逼近型SAR ADC

这篇文章主要弥补上一篇关于ADC的不足&#xff0c;更加深入了解ADC数模转换器的工作原理&#xff0c;举例常见的三种ADC&#xff0c;分别为Flash ADC&流水线ADC&逐次逼近型SAR ADC。 【物联网】深入了解AD/DA转换技术&#xff1a;模数转换和数模转换 文章目录 一、模拟…

休眠和睡眠有哪些区别?如何让电脑一键休眠?

电脑中有休眠和睡眠&#xff0c;那么它们有什么区别呢&#xff1f;下面我们就通过本文来了解一下。 休眠和睡眠的区别 电脑在睡眠状态时&#xff0c;会切断内存之外的设备电源&#xff0c;电脑会进入睡眠状态&#xff0c;当再次唤醒电脑后&#xff0c;不会影响睡眠前保存好的工…

Git中的 fork, clone,branch

一、是什么 fork fork&#xff0c;英语翻译过来就是叉子&#xff0c;动词形式则是分叉&#xff0c;如下图&#xff0c;从左到右&#xff0c;一条直线变成多条直线 转到git仓库中&#xff0c;fork则可以代表分叉、克隆 出一个&#xff08;仓库的&#xff09;新拷贝 包含了原来…

Swing 程序设计

概述 String包的层次结构和继承关系如下 常用的Swing组件如下表 Swing常用窗体 JFrame 窗体 JFrame 类的常用构造方法包括以下两种形式&#xff1a; public JFrame&#xff08;&#xff09;&#xff1a;创建一个初始不可见、没有标题的窗体。public JFrame(String title)…

Java并发编程第11讲——AQS设计思想及核心源码分析

Java并发包&#xff08;JUC&#xff09;中提供了很多并发工具&#xff0c;比如前面介绍过的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore、FutureTask等锁或者同步部件&#xff0c;它们的实现都用到了一个共同的基类——AbstractQueuedSynchronizer&…

element分页

获取数据信息&#xff0c;这是表格和分页内容 <el-col :span"24"><div class"grid-content bg-purple-dark"><el-table :data"tableData" stripe style"width: 100%"><el-table-column prop"xuhao" l…

WorkPlus:企业数字化底座,统一数字化办公入口

在企业数字化转型的潮流下&#xff0c;统一入口的移动数字化底座成为了企业提高工作效率和迈向数字化时代的关键要素。在这个领域&#xff0c;WorkPlus凭借其独特的定位和功能&#xff0c;成为了企业微信、钉钉、飞书等类似产品中的完美选择&#xff0c;为企业提供了统一入口的…

旋转矩阵-数学理论

目录 概述 一、固定旋转&#xff08;Fix Angles&#xff09; 二、欧拉旋转&#xff08;Euler Angle&#xff09; 三、旋转矩阵小结 四、参考 概述 旋转矩阵是姿态的一种数学表达方式&#xff0c;或者笼统说变换矩阵是一种抽象的数学变量。其抽象在于当你看到…

【深度学习】卷积层填充和步幅以及其大小关系

参考链接 【深度学习】&#xff1a;《PyTorch入门到项目实战》卷积神经网络2-2&#xff1a;填充(padding)和步幅(stride) 一、卷积 卷积是在深度学习中的一种重要操作&#xff0c;但实际上它是一种互相关操作&#xff0c;&#xff0c;首先我们来了解一下二维互相关&#xff…