通过vue2来类比学习vue3

需求:之前有vue2基础,需要学习使用vue3;当然小白也可以(建议先学习vue2)

思路:如果已经学习完vue2,那么vue3直接就是小case

一、vue3页面结构(归纳为三种)

1.传统的vue2写法(vue3向下兼容vue2)

<template><div>{{ number }}</div><button @click="addNum">自增</button>
</template>
<script>
export default {data() {return {number: 1,};},methods: {addNum() {this.number += 1;},},
};
</script>

2.<script setup>(推荐)

<template><div>{{ number }}</div><button @click="addNum">自增</button>
</template>
<script setup>
import { ref } from "vue";
const number = ref(1);
const addNum = () => {number.value += 1;
};
</script>

3.setup() 函数写法

<template><div>{{ number }}</div><button @click="addNum">自增</button>
</template>
<script>
import { ref } from "vue";
export default {// !!!看过来<比较繁琐,不推荐使用>setup() {let number = ref(1);const addNum = () => {number.value += 1;};return {number,addNum,};},
};
</script>

如上:<script setup>是最简洁的写法,如果是小白,推荐从第一种(vue2)开始学起

第二种是目前vue3使用比较广泛的写法,也是最简洁明了的

第三种写法:由于所有的数据都需要return才能使用,不建议使用

二、使用 <script setup> 写代码

1.data的使用及类比

<template><div>{{ number }}</div><button @click="addNum">自增</button>
</template>
<script>
export default {// vue2写法data() {return {number: 1,};},methods: {addNum() {this.number += 1;},},
};
</script>
<template><div>{{ number }}</div><button @click="addNum">自增</button>
</template>
<script setup>
// vue3写法
import { ref } from "vue";
const number = ref(1);
const addNum = () => {number.value += 1;
};
</script>

注意:vue2里面的数据,现在都用ref声明;需要使用时,不在用this取值,用.value直接获取。!!!vue3里面不要使用解构,会失去响应(可以来用reactive()保证数据响应)

2.生命周期使用及类比

vue3里面:除了没有beforeCreate和created这两个函数外(使用steup取代,setup函数发生在beforeCreate之前);

还有就是destroy的两个函数改名为unmount,直接在前面加上on开头,并使用驼峰命名就ok。

<template><div>{{ number }}</div><button @click="addNum">自增</button>
</template>
<script setup>
// vue3写法
import { ref } from "vue";
// 需要先解构出来
import {onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted,
} from "vue";
const number = ref(1);
const addNum = () => {number.value += 1;
};
onBeforeMount(() => {});
onMounted(() => {});
onBeforeUpdate(() => {});
onUpdated(() => {});
onBeforeUnmount(() => {});
onUnmounted(() => {});
</script>

3.computed和methods类比

methods在vue3里面只需要创建方法就可以,其余的和vue2相同

<template><div>{{ number }}</div><div>{{ changeNum }}</div><button @click="addNum">自增</button>
</template>
<script>
export default {data() {return {number: 1,number1: 1,};},// vue2写法computed: {changeNum() {return this.number1 + 10;},},methods: {addNum() {this.number += 1;},},
};
</script>
<template><div>{{ number }}</div><div>{{ changeNum }}</div><button @click="addNum">自增</button>
</template>
<script setup>
// vue3写法
import { ref } from "vue";
const number = ref(1);
const number1 = ref(1);
const addNum = () => {number.value += 1;
};
const changeNum = computed(() => {// 记得加 .valuereturn number1.value + 10;
});
</script>

4.watch

<template><div>{{ number }}</div><div>{{ changeNum }}</div><div>{{ watchNumber }}</div><button @click="addNum">自增</button>
</template>
<script>
export default {data() {return {number: 1,number1: 1,watchNumber: 1,};},// vue2写法watch: {number: {handler(newVal, oldVal) {//监听后的操作this.watchNumber += 5;},deep: true, // 加这个属性,深度监听},},computed: {changeNum() {return this.number1 + 10;},},methods: {addNum() {this.number += 1;},},
};
</script>
<template><div>{{ number }}</div><div>{{ watchNumber }}</div><div>{{ changeNum }}</div><button @click="addNum">自增</button>
</template>
<script setup>
import { ref, watch } from "vue";
const number = ref(1);
const number1 = ref(1);
const watchNumber = ref(1);
const addNum = () => {number.value += 1;
};
// vue3写法
watch(number, (newValue) => {watchNumber.value = newValue + 5;
});const changeNum = computed(() => {// 记得加 .valuereturn number1.value + 10;
});
</script>

5.props

vue3声明props可以用defineProps()声明。

// vue2 的写法
<template><div>{{ options }}</div>
</template>
<script>
export default {props: {options: {type: String,default: "",},},created() {console.log(this.options);},
};
</script>
// Vue3 的写法
<template><div>{{ options }}</div>
</template>
<script setup>
// !!!注意这里
const props = defineProps({options: {type: String,default: "",},
});
// 在 script 标签里使用
console.log(props.options);
</script>

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

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

相关文章

GPT-4o,AI实时视频通话丝滑如人类,Plus功能免费可用

不开玩笑&#xff0c;电影《她》真的来了。 OpenAI最新旗舰大模型GPT-4o&#xff0c;不仅免费可用&#xff0c;能力更是横跨听、看、说&#xff0c;丝滑流畅毫无延迟&#xff0c;就像在打一个视频电话。 现场直播的效果更是炸裂&#xff1a; 它能感受到你的呼吸节奏&#xf…

10G UDP协议栈 IP层设计-(6)IP TX模块

一、模块功能 1、上层数据封装IP报文头部 2、计算首部校验和 二、首部校验和计算方法 在发送方&#xff0c;先把IP数据报首部划分为许多16位字的序列&#xff0c;并把检验和字段置零。用反码算术运算把所有16位字相加后&#xff0c;将得到的和的反码写入检验和字段。接收方收…

C++(week2):C语言中高级

文章目录 (八) 指针0.概念1.指针基础(1)指针的声明(2)指针的两个基本操作①取地址运算符 &②解引用运算符 * (3)野指针①野指针②空指针③指针变量的赋值 vs 指针变量指向对象的赋值 (4)指针的应用①指针作为参数进行传递②指针作为返回值③拓展&#xff1a;栈帧 (5)常量指…

【面试干货】HTTPS 工作原理

【面试干货】HTTPS 工作原理 1、握手阶段&#xff08;Handshake&#xff09;2、密钥协商阶段3、加密通信阶段4、结束通信阶段 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff…

C语言实现通讯录,包括增删改查以及动态开辟内存,写入文件等功能

文章目录 前言一、注意二、源码1. test.c源文件2. contact.h头文件3. contact.c源文件 总结 前言 C语言实现通讯录&#xff0c;包括增删改查以及动态开辟内存&#xff0c;写入文件等功能 一、注意 在通讯录菜单栏使用枚举定义PeoInfo类型时&#xff0c;每个结构体类型的成员…

Java保证字符串唯一(不唯一加数字后缀)

在Java中&#xff0c;如果你有一个字符串列表&#xff0c;并希望确保每个字符串都是唯一的&#xff0c;那么可以通过检查重复项并为重复的字符串添加后缀数字来实现。下面是一个示例代码&#xff0c;展示了如何操作字符串以确保不重复&#xff1a; import java.util.;public cl…

手撸XXL-JOB(一)——定时任务的执行

SpringBoot执行定时任务 对于定时任务的执行&#xff0c;SpringBoot提供了三种创建方式&#xff1a; 1&#xff09;基于注解(Scheduled) 2&#xff09;基于接口&#xff08;SchedulingConfigurer&#xff09; 3&#xff09;基于注解设定多线程定时任务 基于Scheduled注解 首…

基于51单片机的冰箱控制系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机冰箱控制系统设计( proteus仿真程序设计报告原理图讲解视频&#xff09; 基于51单片机冰箱控制系统设计 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单&&下载链接资料下载链接&#xff1a; …

【C++】学习笔记——继承_2

文章目录 十二、继承5. 继承与友元6. 继承与静态成员7. 复杂的菱形继承及菱形虚拟继承 未完待续 十二、继承 5. 继承与友元 友元关系不能继承&#xff0c;也就是说父类友元不能访问子类私有和保护成员 。除非子类也设置成友元。 6. 继承与静态成员 父类定义了 static 静态成…

pnpm:无法加载文件 C:\Users\PC\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。

使用pnpm命令启动vue时报了个错&#xff1a; 解决起来也简单&#xff0c;右击开始菜单&#xff0c;用管理员身份打开终端。win11的如下图&#xff1a; win10我记得应该是PowerShell&#xff08;管理员&#xff09;&#xff0c;这样的。 打开之后执行命令&#xff1a; set-…

HOW - 如何封装一个规范的请求

封装一个规范的请求通常涉及到以下几个方面: 请求方法(GET、POST 等)请求参数构造(根据使用的请求库,包括不同 Method 要求的 params 格式、空值处理等)格式转换(如请求体和返回体参数的下划线格式和驼峰格式转换,一般前端会用驼峰命名格式,后台会用下划线命名格式)请…

物联网平台之单体架构

介绍本文主要介绍平台的单体架构&#xff0c;包括各个组件之间的数据流描述以及所做的一些架构选择。在单体架构模式下&#xff0c;所有 ThingsKit 组件都在单个 Java 虚拟机 (JVM) 中启动&#xff0c;并共享相同的操作系统资源。由于 ThingsKit 是用 Java 编写的&#xff0c;因…

蓝队面试题(二)

应急响应基本思路和流程 收集信息:收集客户信息和中毒主机信息,包括样本 判断类型:判断是否是安全事件,何种安全事件,勒索、挖矿、断网、DoS 等等 抑制范围:隔离使受害⾯不继续扩⼤ 深入分析:日志分析、进程分析、启动项分析、样本分析方便后期溯源 清理处置:杀掉…

在Windows环境下的rknn-toolkit环境搭建

在Windows环境下的rknn-toolkit环境搭建 最近需要使用RK3566来跑YOLOv5。想要实现目标就需要使用rknn-toolkit工具将模型转化成可以运行在rk3588的NPU上的模型。只是转换模型的话&#xff0c;没有必要使用GPU&#xff0c;所以我这里安装的是CPU版的&#xff0c;所需的组件按照…

dnf手游攻略,新手入坑必备!

一、角色创建策略 在DNF手游中&#xff0c;角色创建是玩家初入游戏的首要步骤。为最大化游戏体验和收益&#xff0c;新手玩家通常建议创建三个角色&#xff1a;一个主账号和两个副账号。 主账号选择 主账号的选择应基于玩家个人的喜好和对职业的熟悉程度。无论选择哪个职业&a…

番外篇 | 手把手教你利用YOLOv8进行热力图可视化 | 针对视频

前言:Hello大家好,我是小哥谈。YOLOv8的热力图可视化可以帮助我们更加直观地了解模型在图像中的检测情况,同时也可以帮助我们进行模型的调试和优化。热力图是一种颜色渐变的图像,不同颜色的区域表示不同程度的关注度或者置信度。在YOLOv8中,可以通过设置阈值来控制热力图的…

电机控制杂谈——“双采样双更新模式”对模型预测控制/PI控制的提升有多大?

1.采样频率与PWM开关频率的关系 一般有以下两种采样模式。 如下图&#xff08;a&#xff09;所示&#xff0c;这种方式称之为单采单更模式&#xff0c;即在一个PWM周期内&#xff0c;采样一次&#xff0c;更新一次PWM占空比&#xff0c;在这种情况下&#xff0c;采样频率&…

小红书自动私信获客,打造个人品牌

在当今这个内容为王、社交至上的时代&#xff0c;小红书作为新兴的社交电商平台&#xff0c;凭借其独特的社区氛围和强大的种草能力&#xff0c;成为了众多KOL、商家以及个人品牌打造的首选平台。想要在小红书上脱颖而出&#xff0c;精准引流获客&#xff0c;利用自动私信功能不…

【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)

文章目录 1. 环境准备2. 增加数据&#xff08;Create&#xff09;3. 查询数据&#xff08;Retrieve&#xff09;4. 更新数据&#xff08;Update&#xff09;5. 删除数据&#xff08;Delete&#xff09;6. 总结 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实…

强化训练:day8(求最小公倍数、数组中的最⻓连续⼦序列、字⺟收集)

文章目录 前言1. 最小公倍数1.1 题目描述1.2 解题思路1.3 代码实现 2. 数组中的最⻓连续⼦序列2.1 题目描述2.2 解题思路2.3 代码实现 3. 字母收集3.1 题目描述3.2 解题思路3.3 代码实现 总结 前言 1. 最小公倍数   2. 数组中的最⻓连续⼦序列   3. 字⺟收集 1. 最小公倍数…