Vue3 | Vue3与Vue2相比的优势、创建项目的方式以及一些常见的Compositioin API

news2024/11/24 18:34:42

一、Vue3与Vue2相比,有哪些优势呢?

1、性能的提升:

  • 打包大小减少41%
  • 初次渲染快55%,更新渲染快133%
  • 内存减少54%

2、源码的升级

  • 使用Proxy代替defineProperty实现响应式
  • 重写虚拟DOM的实现和Tree-Shaking

3、新的特性

  • Composition API(组合API)
  1. setup配置
  2. ref与reactive
  3. watch与watchEffect
  4. provide与inject
  • 新的内置组件
  1. Fragment
  2. Teleport
  3. Suspense
  • 其他改变
  1. 新的生命周期钩子
  2. data选项应始终被声明为一个函数
  3. 移除keyCode支持作为v-on的修饰符

4、支持TypeScript

  • Vue3可以更好的支持TypeScript

二、两种创建项目方式

1、使用vue-cli创建

## 创建工程
npm init vite-app lee_vue3
## 进入工程目录
cd lee_vue3
## 安装依赖
npm install
## 运行
npm run dev

2、使用 vite 创建

## 创建工程
npm init vite-app lee_vue3
## 进入工程目录
cd lee_vue3
## 安装依赖
npm install
## 运行
npm run dev

3、创建过后,Vue2与Vue3的main.js有什么不同? 

不仅仅是在main.js在有区别,在我们的App.vue组件中的template标签里可以没有根标签了。

三、 Composition API(组合API)

在一开始,我们就有说到,Vue3有一个新特征——Composition API(组合API)。在Vue2中,我们使用的是Options API ,配置项式的API,我们要创建一个Vue实例,然后在里面传入一个配置对象,里面要写data、methods、watch等的东西,而Vue3提出了全新的 Composition API,组合式API,我们不用直接创建Vue实例,而是创建一个app,然后按需引入需要的API,来进行使用。

1、常见的Compositioin API

  • setup

  1. 理解:Vue3.0中一个新的配置项,值为一个函数。
  2. setup是所有Composition API(组合API)“ 表演的舞台 ”
  3. 组件中所用到的:数据方法等等,均要配置在setup中。
  4. setup函数的两种返回值:(1).若返回一个对象,则对象中的属性、方法, 在模板中均可以直接使用。(重点关注!)(2).若返回一个渲染函数:则可以自定义渲染内容。 (不常用)
    <template>
      <h1>博主的信息</h1>
      <h2>姓名:{{ name }}</h2>
      <h2>年龄:{{ age }}</h2>
      <h2>性别:{{ sex }}</h2>
      <button @click="sayInfo">显示信息</button>
    </template>
     
    <script setup>
    // 数据
    let name = "小陈";
    let age = 28;
    let gender = "男";
    
    // 方法
    function sayInfo() {
      alert(`你好${name},你真6`);
    }
    </script>

    如果返回的是渲染函数,那你在template里写的模板都不奏效了,页面渲染的就是你写的渲染函数中的。

注意点:

1.尽量不要与Vue2.x配置混用

  • Vue2.x配置(data、methods、computed...)中可以访问到setup中的属性、方法。
  • 但是在setup中不能访问到Vue2.x配置(data、methods、computed...)。
  • 如果有重名,setup优先

2.setup不能是一个async函数,因为返回值不再是对象,而是promise,模板看不到return对象中的属性。

  • ref函数 
  1. 作用:定义一个响应式的数据
  2. 语法:

     2.1) 创建一个包含响应式数据的引用对象:let xxx = ref(value)

    import { ref } from "vue";
    // 数据
    let name = ref("青阳子");
    let age = ref(28);
    let job = ref({
      type: "前端工程师",
      sex: "30K",
    })

    2.2) JS中操作数据: xxx.value


    // 方法
    function sayInfo() {
      alert(`你好${name.value},你真帅,薪水也${job.value.sex}这么高`);
    }
 

    2.3) 模板中读取数据: 不需要.value,直接:<div>{{xxx}}</div>

<template>
  <h1>博主的信息</h1>
  <h2>姓名:{{ name }}</h2>
  <h2>年龄:{{ age }}</h2>
  <h2>性别:{{ sex }}</h2>
  <button @click="sayInfo">显示信息</button>
</template>

注意点:

  1. 接收的数据可以是:基本类型、也可以是对象类型。
  2. 基本类型的数据:响应式依靠的是类上的gettersetter完成的
  3. 对象类型的数据:内部 “ 求助 ” 了Vue3.0中的一个新函数—— reactive函数。
  •  reactive函数
  1. 作用: 定义一个对象类型的响应式数据(基本类型不要用它,要用ref函数)
  2.  语法:

       2.1) const 代理对象= reactive(源对象)。接收一个对象(或数组),返回一个代理对象(Proxy的实例对象,简称proxy对象)


import { reactive } from "vue"
// 数据
    let lee = reactive({
      name: "青阳子",
      age: 28,
      hobby: ["写博客", "研究前端", "看电影"],
      job: {
        type: "前端工程师",
        salary: "30K",
        a: {
          b: {
            c: 111,
          },
        },
      },
    });

     2.2)reactive定义的响应式数据是“深层次的”。

     2.3) 内部基于 ES6 的 Proxy 实现,通过代理对象操作源对象内部数据进行操作。

 

  • reactive对比ref 
  • 定义数据角度对比
    • ref用来定义:基本类型数据
    • reactive用来定义:对象(或数组)类型数据
    • 备注:ref也可以用来定义对象(或数组)类型数据, 它内部会自动通过reactive转为代理对象
  • 原理角度对比
    • ref通过类中的的gettersetter来实现响应式(数据劫持)。
    • reactive通过使用Proxy来实现响应式(数据劫持), 并通过Reflect操作源对象内部的数据。 
  • 使用角度对比
    • ref定义的数据:操作数据需要.value,读取数据时模板中直接读取不需要.value
    • reactive定义的数据:操作数据与读取数据:均不需要.value。 

2、ref属性 

这个ref 是指属性ref,不是定义响应式数据的 ref,但是还是要依赖响应式数据的ref Api去实现。

vue2 中ref 属性的写法,在js 代码中是通过 this.$refs.xxx 的方式获取,但是vue3 由于setup 语法糖中没有this,所以我们需要依赖ref Api 去实现。

HTML: 

<template>
	<div ref="divDom">divDom</div>
	<button	@click="getRef">获取ref属性</button>
</template>

 JS:

<script setup>
	import { ref } from 'vue'
	let divDom = ref(null)
	const getRef = () => {
		console.log(divDom.value);
		divDom.value.style.color = 'red'
	}
</script>

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

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

相关文章

[附源码]计算机毕业设计JAVA小型医院药品及门诊管理

[附源码]计算机毕业设计JAVA小型医院药品及门诊管理 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM …

Vue3 - Pinia 状态管理(环境搭建安装及各属性使用教程)详细使用教程

目录初识 Pinia介绍环境搭建getters 属性actions 属性Pinia 模块化Pinia 解构 storePinia 数据持久化SEO初识 Pinia vue 官方文档&#xff1a;https://cn.vuejs.org/guide/scaling-up/state-management.html#pinia Pinia 官方文档&#xff1a;https://pinia.web3doc.top/ pinia…

hiveSql冷门但好用函数 --持续更新

hiveSql常用函数字符串函数to_jsonjson_tupletranslate日期函数next_day字符串函数 to_json 将STRUCT类型的数据转化为json格式字符串&#xff0c;此处需要另外学习一个named_struct()函数:自定义结构化数据的KVnamed_struct(k1,v1,k2,v2…)示例&#xff1a; select named_s…

吉时利2602A数字源表-安泰测试

吉时利Keithley2602A双通道系统数字电源 Keithley/吉时利2602A数字源表数字源表是吉时利新的I-V源测量仪器&#xff0c;可用作台式I-V特征分析工具或者构成多通道I-V测试系统的组成模块。作为台式仪器使用时&#xff0c;2600A系列仪器提供了一个嵌入式TSP Express软件工具&…

函数定义、this指向、闭包等

1、函数的定义和调用 1.1函数的定义方式 1、自定义函数&#xff08;命名函数&#xff09; 2、函数表达式&#xff08;匿名函数&#xff09; 3、利用 new Function (‘参数1’, ‘参数2’, ‘函数体’) 1、自定义函数&#xff08;命名函数&#xff09; function fn() {}2、函…

微服务框架 SpringCloud微服务架构 6 Nacos 配置管理 6.1 Nacos 实现配置管理

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构6 Nacos 配置管理6.1 Nacos 实现配置管理6.1.1 统一配置管理6.1.2 直接开干…

Chapter9.4:线性系统的状态空间分析与综合(下)

此系列属于胡寿松《自动控制原理题海与考研指导》(第三版)习题精选&#xff0c;仅包含部分经典习题&#xff0c;需要完整版习题答案请自行查找&#xff0c;本系列属于知识点巩固部分&#xff0c;搭配如下几个系列进行学习&#xff0c;可用于期末考试和考研复习。 自动控制原理(…

UG NX二次开发(C#)-CAM-获取所有的加工刀具表单

文章目录 1、前言2、加工模块的刀具2.1 进入加工模板2.2 创建加工刀具3、创建一个UI Styler程序3.1 创建一个UI Styler3.2 保存对话框4、创建GetMachiningToolList工程5、添加代码6、保存工程,生成dll7、配置工程8、测试效果1、前言 UG NX软件最擅长的就是生成加工程序,包括…

Express操作MongoDB

一、Express框架通过Mongoose模块操作MongoDB数据库 1、MongoDB数据库&#xff1a; ​ &#xff08;1&#xff09;存放数据的格式&#xff1a;key-value ​ &#xff08;2&#xff09;数据库(database) ——- 集合(collection) ——- 文档(document) ​ &#xff08;3&…

数字逻辑·时序线路设计【原始状态表】

这一篇着重原始状态表 组合线路设计与时序线路设计的区别 组合线路设计方法&#xff1a; 确定输入和输出写真值表写表达式并化简根据题目给出的门或者其他要求进行变换&#xff08;取反&#xff09;画电路图 时序线路设计方法&#xff1a; 确定输入和输出&#xff0c;建立…

[Linux]------初识多线程

文章目录前言一、 Linux线程概念什么是线程线程理解证明C线程库二、页表三、线程的优点四、线程缺点五、线程异常六、线程的用途总结前言 本节重点&#xff01;&#xff01;&#xff01; 了解线程概念&#xff0c;理解线程与进程的区别和联系。学会线程控制&#xff0c;线程创…

因子模型套利定价理论APT的应用

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 一、APT&#xff08;套利定价理论&#xff09;应用于计算投资组合的风险 某个投资组合由两个股票A和B组成&#xff0c;它们的暴露系数向量(exposure vector)分别为和。两个股票在投资组合中的比重为…

Turtlebot2简单控制

遥控 遥控前为了让turtlebot接受命令&#xff0c;需要启动 roslaunch turtlebot_bringup minimal.lauch 键盘操作命令&#xff1a; roslaunch turtlebot_teleop keyboard_teleop.launch 简单脚本控制&#xff1a; 首先输入命令 roslaunch turtlebot_bringup minimal.lau…

WebRTC学习笔记七 pion/webrtc

一、Usage用法 1.使用Go Modules Go Modules are mandatory for using Pion WebRTC. So make sure you set export GO111MODULEon, and explicitly specify /v2 or /v3 when importing. 2.常见示例 example applications contains code samples of common things people bu…

Web3.0带来天翻地覆的变化?全面科普!所谓的Web3.0到底是什么?

Web3.0在2021年尾声突然蹿红&#xff0c;在美国国会的听证会里&#xff0c;一句“我们如何确保web3革命发生在美国”引发了大家对于Web3.0的关注&#xff0c;而后马斯克一篇内容为“有人看过web3.0吗? 我没有找到”的推文&#xff0c;将关于Web3.0的讨论推向了高潮。 甚至于这…

零基础入门JavaWeb——CSS相关知识

一、CSS的作用 SS是用于设置HTML页面标签的样式&#xff0c;用于美化HTML页面。 二、CSS的引入方式 2.1 行内样式 在要设置样式的标签中添加style属性&#xff0c;编写css样式&#xff1b;行内样式仅对当前标签生效。 <div style"border: 1px solid red;width: 10…

「MySQL高级篇」SQL优化

大家好&#xff0c;我是Zhan&#xff0c;一名个人练习时长一年半的大二后台练习生&#xff0c;最近在学MySQL高级篇&#xff0c;欢迎各路大佬一起交流讨论 &#x1f449;本篇速览 在前面对索引的的学习中&#xff0c;我们学习到了从MySQL“底层”优化了SQL执行查询的算法&…

认识微服务

认识微服务&#xff1a; 背景&#xff1a;随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。 这些架构之间有怎样的差别呢&#xff1f; 单体架构&#xff1a; 单体架构&#xff1a;将业务的所有功…

颜色的感知

人体内有三种颜色感知细胞&#xff0c;能感知红、绿、蓝三种颜色。 人体内还有一种光强感知细胞&#xff0c;这种关光的波长刚好和绿光接近。 椎状感应颜色 柱状感应强度。

[附源码]Python计算机毕业设计Django的专业技能认证系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…