Vue3学习体验(一)

搭建工程

使用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.mzph.cn/bicheng/46369.shtml

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

相关文章

mount挂载

1&#xff09;Vmvare挂载光驱设备 安装光驱设备后&#xff0c;可以看到设备文件。 ls /dev/sr0 ll /dev/cdrom虽然设备是以文件的形式出现的&#xff0c;但和一般的文件不一样。 2&#xff09;mount挂载 目录是目录&#xff0c;设备是设备&#xff0c;mount挂载可以让目录成…

数据结构——查找(线性表的查找与树表的查找)

目录 1.查找 1.查找的基本概念 1.在哪里找&#xff1f; 2.什么查找&#xff1f; 3.查找成功与否&#xff1f; 4.查找的目的是什么&#xff1f; 5.查找表怎么分类&#xff1f; 6.如何评价查找算法&#xff1f; 7.查找的过程中我们要研究什么&#xff1f; 2.线性表…

Spring webflux基础核心技术

一、 用操作符转换响应式流 1 、 映射响应式流元素 转换序列的最自然方式是将每个元素映射到一个新值。 Flux 和 Mono 给出了 map 操作符&#xff0c;具有 map(Function<T&#xff0c;R>) 签名的方法可用于逐个处理元素。 当操作符将元素的类型从 T 转变为 R 时&#xf…

OpenCV和CUDA匹配,使用源码构建OpenCV

当你使用pip安装opencv-contrib-python时&#xff0c;实际上你是在安装一个预编译的二进制包&#xff0c;这个包并不包含源代码。预编译的包是为特定的Python版本和操作系统架构准备的&#xff0c;所以当你安装时&#xff0c;你不需要源代码&#xff0c;也不需要使用CMake或进行…

qt 获取父控件

在 Qt 中&#xff0c;你可以通过调用 QWidget 的 parentWidget() 方法来获取一个控件的父控件。这个方法会返回一个指向父控件的指针&#xff0c;如果该控件没有父控件&#xff0c;则返回 nullptr。 以下是一个简单的示例&#xff0c;展示了如何获取一个按钮的父控件&#xff…

基于conda包的环境创建、激活、管理与删除

Anaconda是一个免费、易于安装的包管理器、环境管理器和 Python 发行版&#xff0c;支持平台包括Windows、macOS 和 Linux。下载安装地址&#xff1a;Download Anaconda Distribution | Anaconda 很多不同的项目可能需要使用不同的环境。例如某个项目需要使用pytorch1.6&#x…

SAP 消息输出 - Adobe Form

目录 1 安装链接 2 前台配置 - Fiori app 2.1 维护表单模板 (maintain form templates) 2.2 管理微标 (manage logos) 2.3 管理文本 (manage texts) 3 后台配置 3.1 定义表单输出规则 3.2 分配表单模板 SAP 消息输出&#xff0c;不仅是企业内部用来记录关键业务操作也是…

WPF中Frame

在Windows Presentation Foundation (WPF) 中&#xff0c;Frame 控件是一个非常重要的元素&#xff0c;主要用于实现页面导航和内容的动态加载。Frame 类似于网页开发中的iframe&#xff0c;但它是WPF应用程序中的一个容器&#xff0c;能够显示不同的页面或控件内容。 以下是F…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(一)-3GPP TR 22.829 V17.1.0技术报告

本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。 下载…

算法导论 总结索引 | 第五部分 第十八章:B树

1、B 树是 为磁盘或其他直接存取的辅助存储设备 而设计的一种平衡搜索树。B 树类似于红黑树&#xff0c;在降低磁盘 I/O 操作次数方面要更好一些。许多数据库系统 使用 B 树 或者 B 树 的变种来存储信息 2、B 树与红黑树的不同之处 在于 B 树的结点 可以有很多孩子&#xff0c…

STM32-寄存器点灯案例详解

本文以PA1引脚点亮LED灯为案例&#xff0c;解析了STM32寄存器操作的配置过程&#xff0c;以及从手册查询方法和寄存器配置步骤。 一、概念 1.十六进制和二进制之间相互转换关系 首先&#xff0c;需要了解十六进制和二进制之间的基本转换方法。十六进制是一种基数为16的数制&…

制作显卡版docker并配置TensorTR环境

感谢阅读 相关概念docker准备下载一个自己电脑cuda匹配的docker镜像拉取以及启动镜像安装cudaTensorRT部署教程 相关概念 TensorRT是可以在NVIDIA各种GPU硬件平台下运行的一个模型推理框架&#xff0c;支持C和Python推理。即我们利用Pytorch&#xff0c;Tensorflow或者其它框架…

QEMU源码全解析 —— CPU虚拟化(1)

接前一篇文章: 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 特此致谢! 零、序言 一晃已经很久(4个多月)没有更新QEMU这个专栏了。并不是本系列已经完结了,也不是笔者不想写、或者已经失去了继续…

Docker--在linux安装软件

Docker 引用Docker原因是在linux中安装软件 以前在linux中安装软件&#xff0c;是直接安装在linux操作系统上&#xff0c;软件和操作系统耦合度很高&#xff0c;不方便管理&#xff0c;因为linux版本不同&#xff0c;环境也就改变了 docker是一种容器技术&#xff0c;提供标…

7-4 数组逆序(重庆专本贯通C语言大一期末考试题目详解)

分数 10 入门 全屏浏览 切换布局 作者 Jackson 单位 上海大学 给你 n 个整数&#xff0c;将其逆序输出。 输入格式: 第一行一个整数 n &#xff08;3<n<10) 代表数的个数。 第二行 n 个整数&#xff08;空格隔开&#xff09;&#xff08;这些数在 0~10^6 之间)。…

概率论原理精解【3】

文章目录 向量值向量值函数导数向量值函数定义性质应用示例 向量值函数的导数定义性质应用 向量值 向量值函数导数 D R ⊂ R n , 向量值函数 f : D n → R m D^R \subset R^n,向量值函数f:D^n\rightarrow R^m DR⊂Rn,向量值函数f:Dn→Rm 复合函数 f i : π i ∘ f , i 1 , 2…

frameworks 之FallbackHome

frameworks 之FallbackHome FallbackHome 启动启动 Activity 流程创建进程ActivityThrad 与 AMS启动真正的 Launcher mActivityManagerService 创建后会启动 FallbackHome 再启动桌面程序。因为此时还没解锁&#xff0c;桌面又涉及很多其他应用程序相关&#xff0c;所以要等待用…

Flutter EasyRefresh:介绍与使用指南

什么是 Flutter EasyRefresh&#xff1f; Flutter EasyRefresh 是一个强大的下拉刷新和上拉加载组件&#xff0c;用于构建流畅且高效的 Flutter 应用程序。它提供了多种自定义配置和动画效果&#xff0c;使开发者可以轻松实现列表的刷新和加载功能。 主要功能 支持下拉刷新和…

Python学生信息管理系统的设计与实现

在本篇博客中&#xff0c;我们将深入探讨一个基于Python的简单学生信息管理系统的设计与实现过程。这个系统允许用户执行诸如添加、删除、修改和查询学生信息等操作。我们将逐步解析代码&#xff0c;理解其中的关键概念和编程实践。 1. 系统概述 该系统由几个核心功能组成&am…

【Python】数据处理(mongodb、布隆过滤器、索引)

数据 数据预处理 df pd.read_csv(file_path, encodingANSI) csv的编码方式一定要用 ANSI。要不然会出现各种报错 import pandas as pd from datetime import datetime# 读取CSV文件 file_path book_douban.csv df pd.read_csv(file_path, encodingANSI)# 定义一个函数来…