Vue3学习体验(一)

server/2024/12/23 4:23:30/

搭建工程

使用vue-cli脚手架创建vue3工程

vue create vue3-app-vue-cli

Vue-cli官网:https://cli.vuejs.org/zh/guide/installation.html

使用vite搭建vue3工程

npm init表示临时的下载vite应用来创建vue3工程,工程名称为vue3-app-vite

npm init vite-app vue3-app-vite

注意:以上方式不是全局安装。

两种方式搭建工程的区别

  • vue-cli搭建的工程
    • import引入时,可以省略文件后缀名,如import App from './App'
    • 页面文件index.html放在public目录中
  • vite搭建的工程
    • import引入时,除了js文件不需要加.js后缀外其他文件引入时都要加后缀名,如:import App from './App.vue'
    • 页面文件index.html不再放入public目录中,而是放在根目录下,其他的静态资源还是放在public目录下(原封不到生成到打包结果的那些)

二者打包后生成的dist目录结构也不一样。

Vue3变化

总结一些细节变化,不涉及底层原理。

没有 Vue 构造函数了

Vue2 中

import App from "./App.vue";
const app = new Vue(options)
Vue.use()
app.$mount("#app")

这种构造函数方式创建 Vue 更像是一个组件实例,里面有很多属性等,有很多是 $_开头的属性。

采用具名导出

Vue3中

import { createApp } from "vue";

createApp 表示创建一个应用

这种更新好像叫做 breaking 截断式更新,意思是不再兼容老版。

const app = createApp(App);
app.mount("#app");

这种函数式的创建 Vue,得到的是一个非常纯净的实例对象、一个 Vue 应用对象,里面只提供了必须的、会用到、要用到的方法,那些不太会用到的方法被去掉了。

使用插件方式不同

Vue2 中,Vue.use(插件),使用的是 Vue 构造函数上的静态方法。
Vue3 中,app.use(插件),使用的是const app = createApp(App);创建的实例对象的方法。

this不同

Vue2 中 this 指向 Vue 构造函数的实例对象,而 Vue3 中 this 指向的是一个 proxy 代理对象。
在这里插入图片描述
但是,
在 Vue3 中我们一般会使用 setup 函数,而在setup函数中,this 指向 undefined

<template><p></p>
</template><script>
export default {setup() {// console.log("所有生命周期钩子函数之前调用");// console.log(this); // this -> undefinedreturn {};},
};
</script>

选项式与组合式

Vue2 是选项式 Api
在这里插入图片描述
Vue3 是组合式 Api
在这里插入图片描述

Vue3 中的 setup 函数

<template><h1>count:{{ count }}</h1><p><button @click="decrease">decrease</button><button @click="increase">increase</button></p>
</template><script>
export default {setup() {// console.log("所有生命周期钩子函数之前调用");// console.log(this); // this -> undefinedlet count = 0;const increase = () => {count++;}const decrease = () => {count--;};// setup中,count是一个对象// 实例代理中,count是一个count.valuereturn {count,increase};},
};
</script>

setup 函数中 return 返回的对象中的属性会被附着到组件实例中。
此时,count 值变化不会触发视图更新,因为 count 不是一个响应式数据。

Vue3 中的数据响应式

如何将上述的 count 变量转成响应式?
Vue3 中提供了一些响应式 Api 来对数据做响应式处理。
修改上面的代码,如下:

<template><h1>count:{{ countRef }}</h1><p><button @click="decrease">decrease</button><button @click="increase">increase</button></p>
</template><script>
import { ref } from "vue";
export default {setup() {// console.log("所有生命周期钩子函数之前调用");// console.log(this); // this -> undefined// setup中,count是一个对象// 实例代理中,count是一个count.valuelet countRef = ref(0);const increase = () => {countRef.value++;};const decrease = () => {countRef.value--;};return {countRef,increase,decrease,};},
};
</script>

setup 函数环境中,count 是一个对象
模板实例环境中、实例代理中,count 是一个 count.value
在这里插入图片描述
调整以上代码,使用函数封装 increase、decrease 操作逻辑

<template><h1>count:{{ countRef }}</h1><p><button @click="decrease">decrease</button><button @click="increase">increase</button></p>
</template><script>
import { ref } from "vue";function useCount() {let countRef = ref(0);const increase = () => {countRef.value++;};const decrease = () => {countRef.value--;};return {countRef,increase,decrease,};
}export default {setup() {// console.log("所有生命周期钩子函数之前调用");// console.log(this); // this -> undefined// setup中,count是一个对象// 实例代理中,count是一个count.value//1. 新增//2. 修改//3. 删除return {...useCount(),};},
};
</script>

http://www.ppmy.cn/server/61080.html

相关文章

Android adb启动任意app的几种方式

使用adb启动应用程序主要有两种方式&#xff1a;一种是已知应用程序的包名和主Activity&#xff0c;另一种是不知道应用程序的包名和主Activity。 已知应用程序的包名和主Activity 在这种情况下&#xff0c;我们可以通过输入特定的adb命令来启动应用程序。具体步骤如下&#x…

【Docker 入门】

文章目录 概要 一、安装Docker CE1.1.配置阿里云镜像加速【可选】1.2.重启 二、Docker版本选择三、Docker指令1.Docker命令1.1.run1.2.start/stop/restart1.3.kill1.4.rm1.5.create1.6.ps1.7.exec1.8.top1.9.port 2.Dockerfile关键字3.镜像打包4.镜像运行5.镜像导入导出6.镜像查…

报错:pytest: error: argument -m: expected one argument (via addopts config)

错误&#xff1a;ERROR: usage: pytest [options] [file_or_dir] [file_or_dir] [...] pytest: error: argument -m: expected one argument (via addopts config) 原因&#xff1a;pytest.ini里面-m应该去掉&#xff0c;因为没指定标签。 [pytest] markerssmoke:冒烟测试sy…

GEO数据挖掘从数据下载处理质控到差异分析全流程分析步骤指南

综合的教学视频介绍 GEO数据库挖掘分析作图全流程每晚11点在线教学直播录屏回放视频&#xff1a; https://www.bilibili.com/video/BV1rm42157CT/ GEO数据从下载到各种挖掘分析全流程详解&#xff1a; https://www.bilibili.com/video/BV1nm42157ii/ 一篇今年近期发表的转…

docker inspect 如何提取容器的ip和端口 网络信息?

目录 通过原生Linux命令过滤找到IP 通过jq工具找到IP 使用docker -f 的过滤&#xff08;模板&#xff09; 查找端口映射信息 查看容器内部细节 docker inspect 容器ID或容器名 通过原生Linux命令过滤找到IP 通过jq工具找到IP jq 是一个轻量级且灵活的命令行工具&#xf…

Zynq系列FPGA实现SDI视频编解码+图像缩放+多路视频拼接,基于GTX高速接口,提供8套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本博已有的FPGA图像缩放方案本方案的无缩放应用本方案在Xilinx--Kintex系列FPGA上的应用 3、详细设计方案设计原理框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGB自研…

昇思25天学习打卡营第24天|MindSpore红酒分类实验

一、简介&#xff1a; K近邻算法实现红酒分类&#xff0c;本实验主要介绍使用MindSpore在部分wine数据集上进行KNN实验。 实现目的&#xff1a;①了解KNN的基本概念&#xff1b;②了解如何使用MindSpore进行KNN实验。 二、K近邻算法原理介绍&#xff1a; K近邻算法&#xff…

【Qt 基础】绘图

画笔 QPen pen; pen.setWidth(3); // 线条宽度 pen.setColor(Qt::red);// 画笔颜色 pen.setStyle(Qt::DashLine);// 线条样式 pen.setCapStyle(Qt::RoundCap);// 线端样式 pen.setJoinStyle(Qt::BevelJoin);// 连接样式 painter.setPen(pen);线条 线端 连接 画刷 QBrush bru…