20分钟---Vue2->Vue3

Vue官网地址:gVue.js - The Progressive JavaScript Framework | Vue.js

选项式vs组合式

vue的两种风格,搬运官网源码:

选项式 API (Options API)​

使用选项式 API,我们可以用包含多个选项的对象来描述组件的逻辑,例如 datamethods 和 mounted。选项所定义的属性都会暴露在函数内部的 this 上,它会指向当前的组件实例。

<script>
export default {// data() 返回的属性将会成为响应式的状态// 并且暴露在 `this` 上data() {return {count: 0}},// methods 是一些用来更改状态与触发更新的函数// 它们可以在模板中作为事件处理器绑定methods: {increment() {this.count++}},// 生命周期钩子会在组件生命周期的各个不同阶段被调用// 例如这个函数就会在组件挂载完成后被调用mounted() {console.log(`The initial count is ${this.count}.`)}
}
</script><template><button @click="increment">Count is: {{ count }}</button>
</template>

组合式 API (Composition API)​

通过组合式 API,我们可以使用导入的 API 函数来描述组件逻辑。在单文件组件中,组合式 API 通常会与 <script setup> 搭配使用。这个 setup attribute 是一个标识,告诉 Vue 需要在编译时进行一些处理,让我们可以更简洁地使用组合式 API。比如,<script setup> 中的导入和顶层变量/函数都能够在模板中直接使用。

下面是使用了组合式 API 与 <script setup> 改造后和上面的模板完全一样的组件:

<script setup>
import { ref, onMounted } from 'vue'// 响应式状态
const count = ref(0)// 用来修改状态、触发更新的函数
function increment() {count.value++
}// 生命周期钩子
onMounted(() => {console.log(`The initial count is ${count.value}.`)
})
</script><template><button @click="increment">Count is: {{ count }}</button>
</template>

创建vue3项目

vue create yf_vue3_1

选择vue3

进入创建的yf_vue3_1项目中

cd yf_vue3_1

通过上图的提示,使用

npm run serve

启动项目即可

vue3核心语法

保留了绝大部分的vue2语法

<script>
import HelloWorld from "./components/HelloWorld.vue";export default {name: "App",data() {},methods: {},components: {HelloWorld,},
};

通过setup启动组合式api

其中import 的 HelloWorld组件不需要再components中注册,导入即注册!

defineProps

组件间传值

<template><div class="hello"><h1>{{ props.msg }}</h1></div>
</template><script setup>
import { defineProps } from "vue";
const props = defineProps({msg: {type: String,require: true,},
});
</script>

响应式的基本类型ref()

ref(0) ref("abc"),操作值需要加.value,具体原理可以参考ts中的proxy部分。

响应式的对象类型reactive()

综合例子:

<template><div class="hello"><h1>{{ props.msg }}</h1><form><label for="username">Username:</label><input type="text" id="username" v-model="username" /><label for="password">Password:</label><input type="password" id="password" v-model="password" /><button type="button" @click="submitForm">Submit</button></form><form><label for="username">Username:</label><input type="text" id="username1" v-model="userData.username1" /><label for="password">Password:</label><input type="password" id="password1" v-model="userData.password1" /><button type="button" @click="submitForm1">Submit</button></form></div>
</template><script setup>
import { defineProps, reactive, ref } from "vue";
const props = defineProps({msg: {type: String,require: true,},
});const username = ref("初始值");
const password = ref("");// 提交表单数据的函数
function submitForm() {console.log("Username:", username.value);console.log("Password:", password.value);
}const userData = reactive({username1: "",password1: "",
});
// 提交表单数据的函数
function submitForm1() {console.log("Username:", userData.username1);console.log("Password:", userData.password1);
}
</script>

浅响应shallowReactive

如果修改根属性,则多维属性会一起修改。如果只修改role这个多维属性,则不会修改。

const showData = shallowReactive({name: "有风",role: ["admin", "admin1"],
});
function updateData() {//showData.name = "程序猿有风";showData.role.push("admin2");
}

计算属性computed

const getRole = computed(() => {return showData.role;
});

watch与watchEffect

//监听基本属性
watch(username, (newVal, oldVal) => {console.log(newVal + "---" + oldVal);
});
//监听reavtive中的单个属性
watch(() => showData.name,(newVal, oldVal) => {console.log("监听reavtive中的单个属性:" + newVal + "---" + oldVal);}
);
//监听reavtive中的多个属性
watchEffect(() => {console.log("监听多个属性:" + showData.name + "---" + showData.role);
});

最终的完整源码

<template><div class="hello"><h1>{{ props.msg }}</h1><form><label for="username">Username:</label><input type="text" id="username" v-model="username" /><label for="password">Password:</label><input type="password" id="password" v-model="password" /><button type="button" @click="submitForm">Submit</button></form><form><label for="username">Username:</label><input type="text" id="username1" v-model="userData.username1" /><label for="password">Password:</label><input type="password" id="password1" v-model="userData.password1" /><button type="button" @click="submitForm1">Submit</button></form><div>{{ showData }}<br /><button type="button" @click="updateData">update</button></div><div>{{ getRole }}</div><div>{{ getRole }}</div><div>{{ getRole }}</div></div>
</template><script setup>
import {computed,defineProps,reactive,ref,shallowReactive,watch,watchEffect,
} from "vue";
const props = defineProps({msg: {type: String,require: true,},
});const username = ref("初始值");
const password = ref("");// 提交表单数据的函数
function submitForm() {console.log("Username:", username.value);console.log("Password:", password.value);
}const userData = reactive({username1: "",password1: "",
});
// 提交表单数据的函数
function submitForm1() {console.log("Username:", userData.username1);console.log("Password:", userData.password1);
}const showData = shallowReactive({name: "有风",role: ["admin", "admin1"],
});
function updateData() {showData.name = "程序猿有风";showData.role.push("admin2");
}const getRole = computed(() => {return showData.role;
});//监听基本属性
watch(username, (newVal, oldVal) => {console.log(newVal + "---" + oldVal);
});
//监听reavtive中的单个属性
watch(() => showData.name,(newVal, oldVal) => {console.log("监听reavtive中的单个属性:" + newVal + "---" + oldVal);}
);
//监听reavtive中的多个属性
watchEffect(() => {console.log("监听多个属性:" + showData.name + "---" + showData.role);
});
</script>

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

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

相关文章

[题]欧拉函数 #欧拉函数

目录 欧拉函数一、用公式求代码 二、线性筛法求欧拉函数扩展欧拉定理 欧拉函数 AcWing 873. 欧拉函数 一、用公式求 定义&#xff1a;1 ~ N 中与 N 互质的数的个数被称为欧拉函数&#xff0c;记为ϕ(N)。 怎么求呢&#xff1f;&#xff1f; 有一个公式&#xff1a; N p1a1 X…

MASA MAUI iOS 文件下载与断点续传

文章目录 背景介绍方案及代码1、新建MAUI项目2、建立NSUrlSession会话连接3、使用NSUrlSessionDownloadTask 创建下载任务4、DidWriteData 监听下载5、DidFinishDownloading 完成下载6、CancelDownload (取消/暂停)下载7、ResumeDownload 恢复下载8、杀死进程-恢复下载 效果图总…

Python 小爬虫入门 -- 爬取专栏文章标题保存到 CSV 文件中

爬取专栏文章标题保存到 CSV 文件中目标分析网页代码及理解代码段一代码段二成果展示爬取专栏文章标题保存到 CSV 文件中 目标 从一个网页上抓取数据,并保存到一个 CSV 文件中。 具体是爬取 微机系统与接口上机实验_TD PITE型 专栏里的所有 文章标题 并 保存到 csv 文件 中…

huggingface下载文件,可以看下载进度

1、背景&#xff1a; 想下载huggingface上的模型&#xff0c;有些文件又大有多余&#xff0c;怎么下载呢&#xff1f; 2、方法 1.git clone 全部下载&#xff0c;但是没有进度&#xff0c;不知道什么时候还要等多久 3、终极方案huggingface_hub&#xff0c; 在python用代码下…

less与sass

1.变量&#xff1a; Less: my-color: #ff0000;.container {background-color: my-color; } Sass:$my-color: #ff0000;.container {background-color: $my-color; } 在这点上&#xff0c;Less和Sass的变量概念基本相同&#xff0c;都是以声明的方式存储值&#xff0c;然后在…

GitHub配置SSH key

GitHub配置SSH key Git配置信息并生成密钥 设置用户名和密码 设置用户名 git config --global user.name "用户名" 设置邮箱 git confir --global user.email "邮箱" 生成密钥 ssh-keygen -t rsa -C "邮箱" 查看密钥 到密钥所保存的位置 复…

嵌入式Linux应用开发-第十四章查询方式的按键驱动程序

嵌入式Linux应用开发-第十四章查询方式的按键驱动程序 第十四章 查询方式的按键驱动程序_编写框架14.1 LED驱动回顾14.2 按键驱动编写思路14.3 编程&#xff1a;先写框架14.3.1 把按键的操作抽象出一个button_operations结构体14.3.2 驱动程序的上层&#xff1a;file_operation…

2294. 划分数组使最大差为 K-快速排序

2294. 划分数组使最大差为 K-快速排序 给你一个整数数组 nums 和一个整数 k 。你可以将 nums 划分成一个或多个 子序列 &#xff0c;使 nums 中的每个元素都 恰好 出现在一个子序列中。 在满足每个子序列中最大值和最小值之间的差值最多为 k 的前提下&#xff0c;返回需要划分…

(高阶) Redis 7 第16讲 预热/雪崩/击穿/穿透 缓存篇

面试题 什么是缓存预热/雪崩/击穿/穿透如何做缓存预热如何避免或减少缓存雪崩穿透和击穿的区别?穿透和击穿的解决方案出现缓存不一致时,有哪些修补方案缓存预热 理论 将需要的数据提前加载到缓存中,不需要用户使用的过程中进行数据回写。(比如秒杀活动数据等) 方案 1.…

我们是否真的需要k8s?

文章目录 背景k8s相关的讨论为什么要用k8sk8s带来了什么当前业务使用到k8s的核心优势了吗直接自己买服务器会不会更便宜&#xff1f;其他QA没有人可以说出来为什么一定要用k8s而不是其他的没有人可以解释为什么成本核算困难以及成本这么高的原因没有人给出面向C端&#xff0c;面…

吉力宝:智能科技鞋品牌步力宝引领传统产业创新思维

在现代经济环境下&#xff0c;市场经济下产品的竞争非常的激烈&#xff0c;如果没有营销&#xff0c;产品很可能不被大众认可&#xff0c;酒香也怕巷子深&#xff0c;许多传统产业不得不面临前所未有的挑战。而为了冲出这个“巷子”&#xff0c;许多企业需要采用创新思维&#…

NLP 03(LSTM)

一、LSTM LSTM (Long Short-Term Memory) 也称长短时记忆结构,它是传统RNN的变体,与经典RNN相比&#xff1a; 能够有效捕捉长序列之间的语义关联缓解梯度消失或爆炸现象 LSTM的结构更复杂,它的核心结构可以分为四个部分去解析: 遗忘门、输入门、细胞状态、输出门 LSTM内部结构…

C++(string 类模拟实现)

前提知识&#xff1a;上一章介绍了库里面关于string的诸多接口&#xff0c;这章我要根据库里的相关接口&#xff0c;自己实现。 1.成员变量&#xff1a; 我们需要定义起始位置&#xff0c;已经有效字符个数和容量。 private:char* _str;size_t _size;size_t _capacity; 2.默认…

力扣算法题:34、在排序数组中查找元素的第一个和最后一个位置.java版

版本说明 当前版本号[20230930]。 版本修改说明20230930初版 34.在排序数组中查找元素的第一个和最后一个位置 34. 在排序数组中查找元素的第一个和最后一个位置 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的…

MyBatisPlus(六)字段映射 @TableField

字段注解&#xff08;非主键&#xff09; TableField 用于映射对象的 属性 和表中的 字段 。 当 属性名 和 字段名 差异较大的时候&#xff0c;无法通过默认的映射关系对应起来&#xff0c;就需要指定 属性名 对应 的 字段名。 官网示例 代码实例 package com.example.web.…

js 实现删除数组指定元素

文章目录 需求分析1. 使用 splice() 方法2. 使用 filter() 方法3. 使用 splice 和展开运算符&#xff08;ES6&#xff09;&#xff1a; 新的需求新的分析 需求 删除数组中的指定元素&#xff0c;阁下该如何应对 分析 有多种方法可以实现 JavaScript 数组删除指定元素。以下是其…

MATLAB算法实战应用案例精讲-【人工智能】机器人标定方法

目录 前言 算法原理 为什么机器人需要标定? 哪种情况不需要标定? 理论详解

【网络原理】初始网络,了解概念

文章目录 1. 网络通信1.1 局域网LAN1.2 广域网WAN 2. 基础概念2.1 IP2.2 端口号 3. 认识协议4. 五元组5. 协议分层5.1 分层的作用5.2 OSI七层模型5.3 TCP/IP五层&#xff08;四层&#xff09;模型 6. 封装和分用 1. 网络通信 计算机与计算机之间是互相独立&#xff0c;是独立模…

【小沐学前端】Node.js实现UDP和Protobuf 通信(protobuf.js)

文章目录 1、简介1.1 node1.2 Protobuf 2、下载和安装2.1 node2.2 Protobuf 3、node 代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 4、Protobuf 代码示例4.1 例子:awesome.proto 结语 1、简介 1.1 node Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。 Node.js 是一个开源…

Z检验scipy.stats.norm的相关计算

Z检验&#xff08;Z-test&#xff09;是一种用于检验一个样本的均值是否与已知的总体均值相等的统计方法。它通常用于以下情况&#xff1a; 总体参数已知&#xff1a; 当总体的均值和标准差已知时&#xff0c;可以使用Z检验来确定样本均值是否与总体均值相等。 大样本&#xff…