Vue3 学习 (一)

编码规范

Vue3 通常和 typescript 结合使用 

采用 TypeScript + 组合式 api + setup 语法糖 的形式 

一、Vue3 简介

和 Vue2 相比 性能得到提升

源码升级 使用 Proxy 代替 definedProperty 实现响应式

重写虚拟 DOM 的实现和Tree-Shaking

可以更好的支持 TypeScript

新的特性:

组合式 API:setup ref与reactive computed 与 watch

新的内置组件 

新的声明周期钩子

data 选项始终被声明为一个函数

移除 keyCode 支持作为 v-on 的修饰符

二、创建 Vue3 工程

(一)基于 vue-cli 创建

基于 webpack 大哥级别的工具

(二)基于 vite 创建(推荐)

1.介绍

新的构建工具 和 webpack 等价

官网:https://vitejs.cn

2.特点

轻量快速的热重载 能急速实现服务器的启动 启动比较快

使用 webpack 和 vite 的启动流程 对比 有点像懒加载

typescript  jsx(是js 和 结构混着写的语法) css 等开箱即用 不用配置其它东西

3.过程

在桌面上安装环境

设置 项目基本的配置

 然后就创建成功了

把项目放到 vscode 中 

4.项目文件介绍

1° .vscode 文件夹

里面是一个json 文件 里面记录了我们使用的 Vue 插件 如果我们没安装插件 就会弹出是否安装官方的插件的选项 直接下载即可

2°public 文件夹

就是网页的图标 页签图标

3°src 文件夹

前端工程师所有的工作成果 .js .vue .css

main.ts 文件

createApp 是盆创建了 App

以后的所有的组件都要安装 到根 App 上

最后一句好就是 弄好花和花盆 然后 把花盆放到指定的位置(挂载)

App.vue 文件

和 vue2 组件内容类似 区别是 使用 ts 而不是 js 所以得标注上 lang=“ts” 以防报错

运行能正常显示

4°env.d.ts 文件

刚打开会飘红 因为我们的项目文件夹中缺少依赖 我们使用 npm i 下载我们所需要的依赖

然后就不会报错了

这个文件的作用是 本来 ts类型的文件不认识 .jpg .txt 类型的文件 有了这个 ts 文件能让 ts文件认识这些文件

5°index.html 入口文件

和 vue2 不同不再是 main.js 文件了

看 script 标签 是 src 中 的 main.ts 支撑着文件跑起来了

上面那个 div 是放置 app 组件的容器(放花盆的位置)

6°package.json 文件

包的管理文件

里面是我们安装的包  一些常用的命令也在里面

npm run dev 把最后面的单词进行替换就能 使用其它命令

7° ts的管理文件 

别删就行

8° vite.config.ts 文件

是整个工程的配置文件,后面要用到

三、Vue3 核心语法

vue2 中的 data methods 即是选项也是配置项

(一)OptionsAPI 和  CompositionsApi

vue2 的 api 是 选项式的 API

name 选项 methods 选项 data 选项都是 选项式的 api

缺点:功能很分散 可能 methods 里面的方法 用到了data 选项中的数据 数据和方法在不同的地方有一个改了 别的也得改

vue3 的 api 是 组合式的 API

组合式的 API 解决了这个问题 使用函数的方式把相关的功更加有序的组合在一起,

一个函数里面又有 数据又有 方法又名字 比较集中

(二)拉开序幕的 setup

setup 中根本没有 this 不能使用 this 

1.setup 基本写法

原本的 vue2 的配置 选项式 api(配置式 api)

原本的选项式 api 变成了 组合式的 api

setup 里面可以写 vue2 中的很多选项 并且得 return 我们的数据和方法 才能在模板中使用

而且不是响应式的

setup() {
    // setup 中使用不了 this this 是 undefined,vue3 已经在弱化 this 了
    // 数据
    let name = '张三' //此时的 name 不是响应式的
    let age = 18 //此时的 age 不是响应式的
    let tel = '13888888888' //此时的 tel 不是响应式的
    // 方法
    function changeName() {
      // 不用this 数据就在上面 直接改就行
      name = 'zhang-san' //页面现在不会变化
    }
    function changeAge() {
      age += 1//页面现在不会变化
    }
    function showTel() {
      alert(tel)
    }


    return { name, age, changeName, changeAge, showTel }
  }

2.setup 返回值

不一定非得返回一个对象 也能返回一个函数

    // 将数据方法交出去模板才能使用
    return { name, age, changeName, changeAge, showTel }
    // setup 的返回值也可以是一个渲染函数
    // return () => '哈哈'

3.setup 和传统的配置项的区别

如果我们再写一个 data 配置项

新旧的写法能共存 都能正常使用

data 能读取到 setup 中的信息

setup 读取不到 data 中的数据信息

data() {
    return {
      a: 100,
      //data 能读取到 setup 中的数据
      c:this.age
    }
  },

4.setup 新写法

因为我们如果要使用 setup 中的数据要进行频繁的 return 数据太多我们返回的就更多

直接写在一个 script 标签中 相当于我们 使用了setup 语法

还必须是同一种类型的 script 所以我们 把 lang=”ts“ 加上

<script lang="ts" setup>
let a = 666
</script>

因为我们单独用了一个 script 标签来写 setup 文件 但是之前的 script 标签我们也不能删除 因为我们的 组件的名字只能定义在之前的 script 标签中 ,但是这样又会很麻烦 ,我们可以安装一个插件来把名字写在我们后面的那个 script 标签中 来简化代码

如下安装

下载完毕后,然后在 vite.config.ts 文件中引入 然后使用插件

名字成功改变了

(三) 响应式数据

vue 2 中 只要把 数据写到 data 中数据就是响应式的

vue 3 中 有两个东西来定义响应式数据 一个是 ref 一个是 reactive

1.ref 创建基本类型的响应数据

ref 不是 vue 2 中的那个标签

我们先引入 ref

import {ref} from 'vue'

然后哪个数据是响应式的就用 ref 把哪个数据包裹上 

import {ref} from 'vue'
let name = ref('张三') 
let age = ref(18) 

相当于调用了 ref 函数 里面传入了参数 

里面的数据就变成一个对象了

我们用其中不带下划线的 value 使用这个value属性时我们就得 name.value

但是模板不需要 写 name.value  因为模板给我们默认 加上了 .value  

正常写即可

<template>
  <div class="person">
    <h2>姓名:{{ name }}</h2>
    <h2>年龄:{{ age }}</h2>
    <button @click="showTel">展示联系方式</button>
    <button @click="changeName">修改姓名</button>
    <button @click="changeAge">增加年龄</button>
  </div>
</template>

但是我们  script 中必须用 name.value 的形式

动态的数据就实现了 响应式成功

<script lang="ts" setup name="Person">
import {ref} from 'vue'
let name = ref('张三') //此时的 name 不是响应式的
let age = ref(18) //此时的 age 不是响应式的
let tel = '13888888888' //此时的 tel 不是响应式的
console.log(1,name)
// 方法
function changeName() {
  // 不用this 数据就在上面 直接改就行
  name.value = 'zhang-san' //页面现在不会变化
}
function changeAge() {
  age.value += 1//页面现在不会变化
}
function showTel() {
  alert(tel)
}
</script>

2.reactive 定义对象类型的响应数据

我们对象想变成响应式的对象 就得用 reactive 进行包裹对象

数组同理

查看一下 发现变成代理对象了 说明数据变成响应式的了

<template>
  <div class="person">
    <h2>一辆{{ car.brand }}车,价值{{ car.price }}</h2>
    <button @click="changePrice">修改汽车的价格</button>
  <br>
  <h1>游戏列表:</h1>
  <ul>
    <li v-for="g in games" :key="g.id">{{g.name}}</li>
  </ul>
  <button @click="changeFirstGame"></button>
  </div>
</template>


<script lang="ts" setup name="Person">
import { reactive } from 'vue'
// 数据
let car = reactive({ brand: '奔驰', price: 100 })
let games =reactive([
  { id: '01', name: '王者荣耀' },
  { id: '02', name: '原神' },
  { id: '03', name: '三国杀' }
])
// 现在car 是一个代理对象 proxy 原生就有的函数
console.log(car)
// 方法
function changePrice() {
  car.price += 10
}
function changeFirstGame(){
  games[0].name = '流星蝴蝶剑'
}
</script>

<style scoped>
.person {
  background-color: skyblue;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}
</style>

3.ref 定义对象类型的数据

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python——Fastapi管理平台(打包+优化)

目录 一、配置多个表 1、后端项目改造 2、导包报错——需要修改&#xff08;2个地方&#xff09; 3、启动后端&#xff08;查看是否有问题&#xff09; 4、配置前端 二、打包——成exe文件&#xff08;不包含static文件&#xff09;简单 1、后端修改 2、前端修改 3、运行打包命…

5 Spring 事务管理

目录 1.概述 2.事务特性&#xff1a;ACID 3.Spring 框架的事务管理支持两种方式 编程式事务 申明式事务 4.Spring 事务管理 API 事务管理器接口 Spring 的回滚方式 事务定义接口 事务的四种隔离级别 事务的七种传播行为 5.事务注解例子&#xff1a; Transactianal…

中间件之异步通讯组件RabbitMQ进阶

这里我们必须尽可能确保MQ消息的可靠性&#xff0c;即&#xff1a;消息应该至少被消费者处理1次 那么问题来了&#xff1a; 我们该如何确保MQ消息的可靠性&#xff1f; 如果真的发送失败&#xff0c;有没有其它的兜底方案&#xff1f; 首先&#xff0c;我们一起分析一下消息…

多模态大模型MLLM VIT CLIP BLIP

一、Vit模型介绍 Vit&#xff08;Vision Transformer&#xff09;即将Transformer应用于视觉领域。 Transformer输入输出都是一个序列&#xff0c;若需要应用于视觉领域&#xff0c;则需要考虑如何将一个2d图片转化为一个1d的序列&#xff0c;最直观的想法将图片中的像素点输…

Logit Standardization in Knowledge Distillation 知识蒸馏中的logit标准化

摘要 知识蒸馏涉及使用基于共享温度的softmax函数将软标签从教师转移到学生。然而&#xff0c;教师和学生之间共享温度的假设意味着他们的logits在logit范围和方差方面必须精确匹配。这种副作用限制了学生的表现&#xff0c;考虑到他们之间的能力差异&#xff0c;以及教师天生…

旺店通·企业奇门和金蝶云星空单据接口对接

旺店通企业奇门和金蝶云星空单据接口对接 源系统:金蝶云星空 金蝶K/3Cloud&#xff08;金蝶云星空&#xff09;是移动互联网时代的新型ERP&#xff0c;是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”&#xff0c;旨在帮助企业打造面向…

Web3 ETF软件开发

开发Web3 ETF软件涉及到金融、法律和技术等多个领域的专业知识&#xff0c;因此存在以下技术难点&#xff0c;开发Web3 ETF软件是一项复杂的技术挑战&#xff0c;需要综合考虑各种因素。开发人员需要具备较强的技术能力和跨学科知识才能成功开发Web3 ETF软件。北京木奇移动技术…

解决$‘\r‘: command not found 或syntax error near unexpected token `$‘\r‘的四个方法

问题原因&#xff1a; 两个报错原因都是Linux和windows下的回车换行符不兼容 解决方法&#xff1a; 方法一&#xff1a;在windows系统可以用文本编辑器查看所有字符&#xff0c;例如notepad&#xff0c;编辑->档案格式转换->转换为UNIX格式 方法二&#xff1a;在Linux系…

uniapp读取项目本地文件/json文件/txt文件

uniapp读取项目本地文件/json文件/txt文件 文件必须放在static目录下 方法&#xff1a; /*** 访问static里面的文件* param url 文件路径 必须在static目录下*/ function localFetch(url) {return new Promise((resolve, reject) > {plus.io.resolveLocalFileSystemURL(_ww…

【LeetCode】链表oj专题

前言 经过前面的学习&#xff0c;咋们已经学完了链表相关知识&#xff0c;这时候不妨来几道链表算法题来巩固一下吧&#xff01; 如果有不懂的可翻阅之前文章哦&#xff01; 个人主页&#xff1a;小八哥向前冲~-CSDN博客 数据结构专栏&#xff1a;数据结构【c语言版】_小八哥…

HCIP-Datacom-ARST必选题库_OSPF【道题】

某工程师利用2台路由器进行IPv6测试&#xff0c;他想要通过运行OSPFv3实现IPv6网络的互联互通。关于R1需要进行的OSPPv3相关配置&#xff0c;正确的有? [R1] router id 10.1.1.1A [R1-Giqabi tEthernet0/0/1] ospfv3 1 area 0 [R1-ospfv3-11 router-id 10.1.1.1 [R1-ospfv3…

AcWing 835:Trie字符串统计 ← 字典树(Trie树)模板题

【题目来源】https://www.acwing.com/problem/content/837/【题目描述】 维护一个字符串集合&#xff0c;支持两种操作&#xff1a; ● I x 向集合中插入一个字符串 x&#xff1b; ● Q x 询问一个字符串在集合中出现了多少次。 共有 N 个操作&#xff0c;所有输入的字符…

【JAVA】类加载过程,以及类加载器

类加载过程&#xff0c;以及类加载器 一、类加载的过程二、类加载器介绍三、跨类加载三、举例说明 一、类加载的过程 类加载是Java虚拟机&#xff08;JVM&#xff09;将类文件加载到内存中并转换成对应的类对象的过程。它确保了类文件能够正确加载并转换成可执行的类对象&…

SpringSecurity源码分析(RemeberMe)

RememberMeServices RememberMeServices 记住我的服务的接口 可以重写实现自己的记住我 public interface RememberMeServices { //建议 org. springframework. security. authentication. RememberMeAuthenticationToken 在大多数情况下使用它&#xff0c;因为它具有相应的身份…

如何在您的WordPress网站上安装和设置Yoast seo?

本周有一个客户&#xff0c;购买Hostease的虚拟主机&#xff0c;询问我们的在线客服&#xff0c;如何在您的WordPress网站上安装和设置Yoast seo?我们为用户提供相关教程&#xff0c;用户很快解决了遇到的问题。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以对您…

如何利用AI技术提升内容生产的效率和质量

目录 前言1 自动化内容生成1.1 文章生成1.2 视频制作1.3 音频合成 2 内容分发与推广2.1 智能内容推荐2.2 社交媒体管理 3 内容分析与优化3.1 用户反馈分析3.2 内容效果评估 结语 前言 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术对内容生产、分发和优…

Linux:进程通信(三)信号的捕捉

目录 一、信号捕捉函数 1、signal函数 2、sigaction函数 二、用户态与内核态 1、用户态 2、内核态 用户态与内核态转换 三、volatile关键字 四、SIGCHLD信号 一、信号捕捉函数 1、signal函数 signal函数是C语言标准库中的一个函数&#xff0c;用于处理Unix/Linux系…

数据结构——二叉排序树

懒猫老师-数据结构-(58)二叉排序树的删除(二叉查找树)_哔哩哔哩_bilibili 概念 (1)若它的左子树不空&#xff0c;则左子树上所有结点的值均小于根结点的值; (2)若它的右子树不空&#xff0c;则右子树上所有结点的值均大于根结点的值; (3)它的左右子树也都是二叉排序树。 通…

顶级开源Kubernetes管理工具有哪些?好用Kubernetes工具推荐

Kubernetes已经成为容器编排领域颠覆性的技术&#xff0c;而充满活力的开源社区是其成功背后的推动力。本文将为大家推荐好用的Kubernetes工具&#xff0c;围绕Kubernetes发展的生态系统的广度和深度。 从自动化和监控到网络和安全性&#xff0c;这些工具为管理容器化应用程序…

Python入门到精通,一个月就够了!前字节大佬超详细系统学习路线

毫无疑问&#xff0c;Python 是当下最火的编程语言之一。 对于许多未曾涉足计算机编程的领域「小白」来说&#xff0c;深入地掌握 Python 看似是一件十分困难的事。 感觉很迷茫&#xff1f;学了一段时间还是不入流&#xff1f;很大一部分原因是因为你没有一个完整的知识体系&…