Vue3(一) Vite创建Vue3工程,选项式API与组合式API;setup的使用;Vue中的响应式ref,reactive

文章目录

  • 一、创建Vue3工程
    • 1. vue-cli方式
    • 2. vite方式
    • 3. 项目小说明
    • 4. 安装插件:
      • (1) Prettier--整理格式
      • (2) Vue-official
  • 二、 OptionsAPI 与 CompositionAPI
    • 1 选项式API的弊端
    • 2 组合式API的优势
  • 三、setup
    • 1. 基本使用
    • 2 setup与组合式API
    • 3 setup语法糖
  • 四、Vue中的响应式
    • 1. ref创建基本类型的响应式数据
    • 2. reactive创建对象类型的响应式数据
    • 3. ref创建对象类型的响应式数据
    • 4. ref与reactive对比
    • 5. toRef和toRefs

一、创建Vue3工程

1. vue-cli方式

备注:目前vue-cli已处于维护模式,官方推荐基于 Vite 创建项目。

## 查看@vue/cli版本,确保@vue/cli版本在4.5.0以上
vue --version## 安装或者升级你的@vue/cli 
npm install -g @vue/cli## 执行创建命令
vue create vue_test##  随后选择3.x
##  Choose a version of Vue.js that you want to start the project with (Use arrow keys)
##  > 3.x
##    2.x## 启动
cd vue_test
npm run serve

2. vite方式

vite官网中文:Vite;Vite 是新一代前端构建工具,优势如下:

  • 轻量快速的热重载(HMR),能实现极速的服务启动。
  • TypeScriptJSXCSS 等支持开箱即用。
  • 真正的按需编译,不再等待整个应用编译完成。
    在这里插入图片描述
    Vue3向下兼容Vue2语法,且Vue3中的模板中可以没有根标签

3. 项目小说明

项目的入口文件是index.html
在这里插入图片描述
加载index.html后,Vite 解析 <script type="module" src="/src/main.ts"> 指向的文件。
在这里插入图片描述

4. 安装插件:

(1) Prettier–整理格式

在这里插入图片描述
setting.json文件里,改成红色那一行(我是改这一行就好了)
在这里插入图片描述

(2) Vue-official

在这里插入图片描述
官方推荐安装,先安装吧,后续写代码会有帮助。到时候会记录

二、 OptionsAPI 与 CompositionAPI

  • vue2中的API设计是Options风格的(选项式或配置式)
  • vue3中的API设计是Composition风格的(组合式)

1 选项式API的弊端

选项式的API:数据、方法、计算属性等,是分散在:datamethodscomputed中的,若想新增或者修改一个需求,就需要分别修改:datamethodscomputed,不便于维护和复用。(学习vue2其实主要就是在学一个一个的配置项data,methods)
在这里插入图片描述

2 组合式API的优势

可以用函数的方式,更加优雅的组织代码,让相关功能的代码更加有序的组织在一起。
在这里插入图片描述

说明:以上两张动图原创作者:大帅老猿

三、setup

1. 基本使用

现有这样一个页面:
在这里插入图片描述
在vue2中,使用的是配置项的方式:

 // 数据data() {return {nickName: "tom",};},
// 方法methods: {changeName() {this.nickName = "Tom";},}

vue3中使用setup函数

setup() {// 数据,对应到vue2中是应该写在data配置项中;// 此时的hobby,age都不是响应式的数据let hobby = "sing";let age = 18;// 方法,对应到vue2中是应该写在methods配置项中,function changeHobby() {hobby = "dance"; // 注意:这样修改name页面没有变化console.log(hobby); // hobby的值确实改了,但不是响应式的}function changeAge() {age = age + 1;}// console.log(this); // undefined,vue3中已经弱化了thisreturn { h: hobby, age, changeHobby, changeAge };
},

setup特点:

  • setup函数里的this值是undefined
  • setup函数中的数据不是响应式的。数据值改了,但是页面不会更新
  • setup执行的时机比vue2中的beforeCreate钩子函数还要早
  • 页面结构中若要用到setup里的数据,需要setup函数return返回。
    • 若返回一个对象:则对象中的:属性、方法等,在模板中均可以直接使用。
      在这里插入图片描述
    • 若返回一个函数:则可以自定义渲染内容
      setup(){return ()=>'哈哈' 	// 页面上直接渲染 '哈哈'两个字
      }
      

2 setup与组合式API

  • Vue2的配置(datamethos…)中可以访问到 setup中的属性、方法。
  • 但在setup不能访问到Vue2的配置(datamethos…)。
  • 如果与Vue2冲突,则setup优先。
    在这里插入图片描述

3 setup语法糖

script标签里标注setup后,就不用再写setup函数,return;

<!-- 数据、方法 -->
<script setup lang='ts'>let age = 18;let h = "sing";function changeHobby() {h = "dance";}function changeAge() {age = age + 1;}
</script>

此时无法指定组件名称,组件名称(Person)默认为文件名Person.vue;语法糖模式下指定组件名有两种方式:

方式一 :需要再编写一个不写setupscript标签,去指定组件名字

<!-- 这个主要用来定义组件名称 -->
<script  lang='ts'>
export default {name: "Person",
};
</script>
<!-- 数据、方法 -->
<script setup lang='ts'>
...
</script>

方式二 :安装插件
(1)安装:npm i vite-plugin-vue-setup-extend -D
(2)配置: vite.config.ts
在这里插入图片描述
(3) 使用:<script setup lang='ts' name="Person">

拓展:使用第二种方式,App引入Person组件时报错
在这里插入图片描述
这是插件的问题,卸载vetur插件即可,vue2.x使用vetur插件,vue3.x更换成Vue-Official插件可更好的支持TS

四、Vue中的响应式

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

  • 语法:let xxx = ref(初始值)
  • 返回值:一个RefImpl的实例对象,简称ref对象refref对象的value属性是响应式的。
  • 注意点:
    • JS中操作数据需要:xxx.value,但模板中不需要.value,直接使用即可。
    • 对于let age = ref(18);来说,age不是响应式的,age.value是响应式的。
 <div><h1>爱好:{{ hobby }}</h1><!--无需.value--><h1>年龄:{{ age }}</h1><button @click="changeAge">点击改变年龄</button></div>
<script setup lang='ts' name="Person">
// 1. 引入refimport {ref} from 'vue'
// 2. 谁需要变成响应式数据,ref就包裹谁	let age = ref(18);let hobby = "sing";function changeAge() {age.value = age.value + 1;};console.log(age);console.log(hobby);
</script>

在这里插入图片描述
可以看出hobby还是那个hobby,而age已经变成一个RefImpl的实例对象了。

2. reactive创建对象类型的响应式数据

  • 作用:定义一个响应式对象(基本类型不要用它,要用ref,否则报错)
  • 语法:let 响应式对象= reactive(源对象)
  • 返回值:一个Proxy的实例对象(响应式对象)。
<template><div><h1>一辆{{ car.brand }}车,价值{{ car.price }}w元</h1><button @click="changePrice">修改汽车价格</button></div>
</template><script setup lang='ts' name="Person">
// 1. 引入reactive
import {reactive} from 'vue'
// 2. 使用
let car = reactive({brand:'奔驰',price:20})
let games = reactive([{id:1,name:'超级玛丽'},{id:2,name:'狼人杀'}])
function changePrice() {car.price ++;
};
console.log(car);
console.log(games);
</script>

操作对象的响应式数据时,不用.vlaue了
在这里插入图片描述

  • 注意点:reactive定义的响应式数据是深层次的。

    <template><div><h1>{{ obj.a.b.c }}</h1><button @click="changeC">修改C</button></div>
    </template><script setup lang='ts' name="Person">
    import {reactive} from 'vue'
    let obj = reactive({a: {b:{c:10}}
    })
    function changeC(){obj.a.b.c = 80}
    </script>
    

3. ref创建对象类型的响应式数据

  • ref接收的数据可以是:基本类型、对象类型。
  • ref接收的是对象类型,内部其实也是调用了reactive函数。
import {reactive,ref} from 'vue'
let car = ref({brand:'奔驰',price:20})
let obj = reactive({a:100})
console.log(car);
console.log(obj);

在这里插入图片描述

4. ref与reactive对比

  1. ref用来定义:基本类型数据对象类型数据
    reactive用来定义:对象类型数据

  2. 注意点:
    (1) ref创建的变量必须使用.value
    安装插件(vue-official)可提示程序员该不该写value,安装好之后打开Settings
    在这里插入图片描述
    设置后不起作用就重启vscode。在点.的时候,会提示写value

    (2) reactive重新分配一个新对象,会失去响应式(可以使用Object.assign去整体替换)。

    import { reactive } from "vue"
    let car = reactive({ brand: "奔驰", price: 20 })
    function chageCar() {// car = { brand: "雅迪", price: 1 } // 这样写页面不更新// car = reactive({ brand: "雅迪", price: 1 }) 这样写页面也不更新// 以上两种方式 car都已经是一个新对象了,不是响应式对象// 采用 Object.assign 可仍保持其为响应式Object.assign(car, { brand: "雅迪", price: 1 })
    }
    
  3. 使用原则:
    (1) 若需要一个基本类型的响应式数据,必须使用ref
    (2) 若需要一个响应式对象,层级不深,refreactive都可以。
    (3) 若需要一个响应式对象,且层级较深,推荐使用reactive

5. toRef和toRefs

将响应式对象解构之后获得的变量,就不是响应式的了

let person = reactive({name: "tom",age: 18,
})
// name,age不再是响应式数据,其值变化时,页面不更新
let { name, age } = person
// 上述解构赋值等价于
let name = person.name
let age = person.age

toReftoRefs将一个响应式对象中的每一个属性,转换为ref对象。
toRefstoRef功能一致,但toRefs可以批量转换。

import { reactive, toRefs, toRef } from "vue"let { name, age } = toRefs(person)
console.log(toRefs(person))
console.log("name:", name)
console.log("age:", age)let n1 = toRef(person.age)
console.log("n1:", n1)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[Redis][String][上]详细讲解

目录 0.前言1.常见命令1.SET2.GET3.MSET && MGET4.SETNX && SETXX 2.计数命令1.INCR2.INCRBY3.DECR4.DECYBY5.INCRBYFLOAT6.注意 0.前言 字符串类型是Redis最基础的数据类型&#xff0c;关于字符串需要特别注意&#xff1a; Redis中所有的键的类型都是字符串类…

【南方科技大学】CS315 Computer Security 【Lab3 Format String Vulnerability】

目录 Lab OverviewLab TasksTask 1: The Vulnerable ProgramTask 2: Understanding the Layout of the StackTask 3: Crash the ProgramTask 4: Print Out the Server Program’s MemoryTask 5: Change the Server Program’s MemoryTask 6: Inject Malicious Code into the Se…

Vue2学习笔记(02条件渲染 、监视数据的原理)

1、v-if和v-show的区别 2、Vue监视数据的原理

gcc升级(含命令行升级、手动升级两种方式)

gcc升级 1.yum源替换1.1 备份原始repo配置文件1.2 重新配置CentOS-Base.reporepo文件1.3 清除缓存并重新创建 2. gcc安装3.命令行升级gcc4.手动升级4.1 安装包下载4.2 解压4.3 gcc升级4.3.1 依赖拉取4.3.2 gmp安装4.3.3 mpfr安装4.3.4 mpc安装4.3.5 gcc编译、安装 4.4 gcc命令配…

springsecurity+jwt实现前后端分离认证授权

文章目录 1.简介2.快速入门3.认证3.1登录校验流程3.2原理初探3.3认证详流程详解3.4 分析UsernamePasswordAuthenticationFilter 4.案例实战4.1 思路分析4.2准备工作4.3实战1.数据库校验用户2.核心代码1.创建UserDetailsService实现类2.创建UserDetails实现类3.密码加密存储模式…

前端界面搜索部分,第一个选择框的值,影响第二个选择框的值

1.字段声明 {title: 单位名称,dataIndex: departmentId,align: center,width: 100,hideInTable: true,renderFormItem: (item, { defaultRender, ...rest }) > (<ProFormSelectname"departmentId"// label"单位名称"options{hospitaltData}onChange…

fiddler抓包06_抓取https请求(chrome)

课程大纲 首次安装Fiddler&#xff0c;抓https请求&#xff0c;除打开抓包功能&#xff08;F12&#xff09;还需要&#xff1a; ① Fiddler开启https抓包 ② Fiddler导出证书&#xff1b; ③ 浏览器导入证书。 否则&#xff0c;无法访问https网站&#xff08;如下图&#xff0…

详解CORDIC算法以及Verilog实现并且调用Xilinx CORDIC IP核进行验证

系列文章目录 文章目录 系列文章目录一、什么是CORDIC算法&#xff1f;二、CORDIC算法原理推导三、CORDIC模式3.1 旋转模式3.2 向量模式 四、Verilog实现CORDIC4.1 判断象限4.2 定义角度表4.3 迭代公式 五、仿真验证5.1 matlab打印各角度的正余弦值5.2 Verilog仿真结果观察 六、…

使用Python免费将pdf转为docx

刚刚想将pdf转换为docx文档时&#xff0c;居然要收费 还好我学过编程&#xff0c;这不得露两手 将pdf 转换为 docx 文档 的操作步骤 我这里使用的是Python语言 &#xff08;1&#xff09;在终端上安装 pdf2docx 是一个 Python 库&#xff0c;它可以将 PDF 文件转换为 Word (…

PHP发邮件教程:配置SMTP服务器发送邮件?

PHP发邮件的几种方式&#xff1f;如何使用PHP通过SMTP协议发信&#xff1f; PHP作为一种广泛使用的服务器端脚本语言&#xff0c;提供了多种方式来发送邮件。AokSend将详细介绍如何通过配置SMTP服务器来实现PHP发邮件教程的核心内容。 PHP发邮件教程&#xff1a;设置参数 这…

《Linux运维总结:基于Ubuntu 22.04操作系统+x86_64架构CPU部署二进制mongodb 7.0.14分片集群》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、简介 1、应用场景 当您遇到如下问题时,可以使用分片集群解决: a、 存储容量受单机限制,即磁盘资源遭遇瓶颈。 b、 读写能力受单机限制,可能是CPU、内…

VSCode语法提示的配置

ctrlshiftP打开Command Palette,运行C/Cpp: Edit configurations...生成c_cpp_properties.json c_cpp_properties.json是什么&#xff1f; 这个文件主要是用于VSCode语法提示的配置&#xff0c;例如&#xff1a;指定 include 路径&#xff0c;问题匹配类型等。CtrlShiftP打开C…

课题分享:宿舍管理系统小程序,基于微信小程序+SSM+mysql

一、前言介绍 互联网概念的产生到如今的蓬勃发展&#xff0c;用了短短的几十年时间就风靡全球&#xff0c;使得全球各个行业都进行了互联网的改造升级&#xff0c;标志着互联网浪潮的来临。在这个新的时代&#xff0c;各行各业都充分考虑互联网是否能与本行业进行结合&#xf…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL21

根据状态转移表实现时序电路 描述 某同步时序电路转换表如下&#xff0c;请使用D触发器和必要的逻辑门实现此同步时序电路&#xff0c;用Verilog语言描述。 电路的接口如下图所示。 输入描述&#xff1a; input A , input clk , …

chorme浏览器 您的连接不是私密连接

‌当浏览器显示“您的连接不是私密连接&#xff0c;攻击者可能会试图从 localhost 窃取您的信息&#xff08;例如&#xff1a;密码、消息或信用卡信息&#xff09;”的警告时&#xff0c;这通常意味着您正在尝试访问的网站的安全证书存在问题&#xff0c;可能是因为它使用的是自…

C++学习指南(六)----list

欢迎来到繁星的CSDN。本期内容主要包括&#xff0c;list的介绍、使用以及与vector的优缺点。 一、什么是list 在先前的C语言学习中&#xff0c;我们接触到了顺序表和链表&#xff0c;而在C中&#xff0c;这正好对应了vector&#xff08;动态增长顺序表&#xff09;和l…

1网络安全的基本概念

文章目录 网络安全的基本概念可以总结为以下几个方面&#xff1a; 网络安全的需求&#xff1a; 信息安全的重要性&#xff1a;信息安全是计算机、通信、物理、数学等领域的交叉学科&#xff0c;对于社会的发展至关重要。信息安全的目标&#xff1a;主要包括保密性、完整性、可用…

【Linux】yum、vim、gcc使用(超详细)

Linux中常见的软件安装方式 --------- 下载&&安装 a、yum/apt b、rpm安装包安装 c、源码安装 yum 关于 yum 的所有操作必须保证主机(虚拟机)网络畅通!!! 可以通过 ping 指令验证&#xff1a; ping www.baidu.com 安装软件 yum 会自动找到都有哪些软件包需要下载…

Leetcode 93-复原 IP 地址

有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&#xff0c;但是 “0.011.255.245”、“192.168.…

【爆炸】BB机,BP机,寻呼系统基础知识,物理层讲解

本页介绍寻呼系统基础知识。其中提到了寻呼机使用的数字协议并描述了数字寻呼接收器。 寻呼是一种单向通信系统。寻呼系统向携带小型电池供电设备&#xff08;称为寻呼机&#xff09;的个人广播信号或消息。这是与员工和/或客户沟通的非常重要的方式。让我们看看寻呼系统的工作…