快速掌握Vue3:速成Vue3前端开发看这篇就够啦
一、Vue基本概念
1.1-Vue3的优点
- Vue3支持Vue2额大多数特性。
- 更好的支持TypeScript。
- 打包大小减少41%。
- 初次渲染快55%,更新渲染快133%。
- 内存减少54%。
- 使用proxy代替defineProperty实现数据响应式。
- 重写虚拟DOM的实现和Tree-Shaking。
二、API
2.1-setup
我们可以跟以前定义data和methods,但是vue3中我们更推荐使用setup函数。
- setup是一个函数。只在初始化时执行一次。以后大部分代码都是在setup中写。
- 返回一个对象,对象中的属性或方法,模板中可以直接使用。
- setup返回的数据会和data和methods进行合并,setup优先级更高。
- setup函数中没有this。 以后开发都不使用this了
- setup不要写async函数。
因为async函数必须返回一个json对象供模板使用,如果setup是一个async函数,返回的将是一个promise对象。
如果setup是一个async函数,那该组件就成了一个异步函数,需要配合Suspense组件才能使用。
2.2-ref
让数据变成响应式。
(1)先引用ref
import {ref} from 'vue';
(2)将数据变成响应式的。
let data1=ref(12);
(3)操作数据
data1.value = 123;
2.3-reactive
作用:定义对象格式的响应式数据
如果用ref定义对象/数组,内部会自动将对象/数组转换为reactive代理器对象。
- const proxy=reactive(obj):接收一个普通对象然后返回该普通对象的响应式代理器对象。
- js中修改告诉不需要.value。
- 一般用来定义一个引用类型的响应数据。
2.4-toRefs
将响应式对象中所有属性包装为ref对象,并返回包含这些ref对象的普通对象。
应用:对trsctive定义的对象进行toRefs包装,包装之后的对象中每个属性都是响应式的。
2.5-响应式原理
通过proxy(代理):拦截对对象本身的操作,包括属性的读写、删除等操作。
通过Reflect(反射):动态对被代理对象的响应式属性进行特定的操作。
2.6-watch和watchEffect
watch - 指定监听数据:
- 监听指定的一个或多个响应式数据,一旦发生变化,就会自动执行监视回调。
- 如果是监听reactive对象中的属性,必须通过函数来指定。
- 监听多个数据,使用数组来指定。
- 默认初始时不指定回调,但是通弄过配置immediate为true,来指定初始时立即执行第一次。
- 通过配置deep为true,来指定深度监视。
watchEffect - 不指定监听数据:
- 不用直接指定啦监视的数据,回调函数中使用的哪些响应式数据就监听哪些响应式数据。
- 默认初始就会执行一次。
2.7-生命周期
vue2中的生命周期钩子函数依旧可以使用,不过建议使用vue3的钩子函数

2.8-ref获取元素
vue2中是用thisref.xxx来获取元素或组件,但是vue3中没有this的概念。
vue3通过ref创建响应式数据的api来获取元素。
1.使用ref创建响应式数据,假设叫x
2.模板中绑定ref属性,值为上面的x
注意不能使用v-bind动态绑定。
这是x就是一个dom元素或组件了。
2.9-自定义hook函数
hook函数翻译成中文就是钩子函数(注意并不是生命周期的钩子函数)
比如ref,reactive,computed,watch,onBeforeMount等都是hook函数,只不过他们都是vue内部hook函数。
1.创建一个函数,函数名称必须以"use"开头
2.函数必须return一些数据。
2.10-shallowReactive与shallowRef
他们都表示浅响应式。
- shallowReactive:只处理了对象第一层属性的响应式(值响应第一层)
- shallowRef:只有重新复制时才是响应式(不响应内部数据,只响应整体。)
2.11-readonly与shallowReadonly
- 他们表示只读代理对象
- readonly
- 深度只读
- 设置readonly后,吸怪响应式数据会报错。
- shalloReadonly
- 浅只读
- 设置shalloReadonly后,秀爱响应式数据的第一层数据会报错。
- 应用场景:
- 在某些特定情况下,我们可能不希望对数据进行更新的操作,那就可以包装成一个只读代理对象,而不能修改或删除。
2.12-toRaw与markRaw
- toRaw
- 返回reactive或readonly对象的原始数据
- 这是一个还原方法,可用于临时读取,得到的数据不具有响应式。
- markRow:
- 标记一个对象,使其不具有响应式
- 应用场景:
- 有些只不应被设置为响应式的,例如复杂的第三方实例或Vue组件对象。
- 当渲染具有不可变数据源的大列表时,跳过代理转换可以提高性能。
2.13-toRef
- 为响应式对象上的某个属性创建一个ref引用,更新是应用对象会同步更新。
- 与ref的区别:ref是拷贝了一份新的数据指单独操作,更新时相互不影响。
2.14-customRef
- 用于自定义一个ref,可以显示的控制依赖追踪和触发相应。
- 接受一个工厂函数,两个参数分别用于追踪的track与用于触发相应的trigger,并方法一个带有get和set属性的对象。
- 需求:使用customRef实现防抖函数
2.15-provide与inject
- provide和inject提供依赖注入,功能类似2.0的provide/inject
- 实现跨层级组件(祖孙)间通信。
2.16-响应式数据的判断
- isRef:检查一个值是否为一个ref对象。
- isReactive:检查一个对象是否否是由reactive对象的响应式代理。
- isReadonly:检查一个对象是否由readonly创建的只读代理。
- isProxy:检查一个对象是否是由reactive或者readonly方法创建的代理。
2.17-Fragment(片段)
- 在vue2中:组件中必须有一个跟标签
- 在vue3中:组价可以没有跟标签,内部会将多个标签包含在一个Fragment虚拟标签中。
- 好处:减少标签层级,减小内存占用
2.18-Teleport(瞬移)
- Teleport提供了一种干净的方法,让组件的html在父组件界面外的特定标签(很可能是body)下插入显示。
2.19-Suspense(不确定的)
Supense组件是配合一部组件使用的,它可以让一部组件返回数据前渲染一些后背内容。
那我们首先要学会一个异步组件。
- 在setup函数总返回一个promise,就是一个异步组件。
- setup函数携程async函数,也是一个异步组件。
2.20-其他新的API
- 全新的全局API:
- createApp()
- defineProperty()
- defineComponent()
- nextTick()
- 将原来的全局API转移到应用对象:
- app.component()
- app.config()
- app.directive()
- app.mount()
- app.umount()
- app.use()
2.21-useSlots和useAttrs
useSlots 和 useAttrs 是真实的运行时函数,它会返回与 setupContext.slots 和 setupContext.attrs 等价的值,同样也能在普通的组合式 API 中使用。
使用场景:父组件使用子组件的插槽
1.父组件
<template>
<h1>这是父组件</h1>
<p>插槽上面1</p>
<slots-attrs msg="我是props的msg" heihei="我是attr">
<template #header >
<div style="width:100%;height:100px;border:1px solid green;">我是父组件插槽--插入的内容。。。</div>
</template>
</slots-attrs>
<p>插槽下面2</p>
</template>
<script lang="ts" setup>
import SlotsAttrs from '@/components/04/SlotsAttrs.vue'
</script>
2.子组件
<template>
<Child ref="child"/>
{{msg}}
</template>
<script lang="ts" setup>
import { ref,onMounted } from 'vue';
import Child from '@/components/03/Child.vue'
const child = ref(null);
const msg=ref('')
onMounted(()=>{
console.log("进来了")
console.log(child.value.msg)
msg.value = child.value.msg;
})
</script>
三、路由
(1)userRout:获得当前路由对象。
(2)useRouter:获得路由实例,可以进行路由跳转。
import {useRoute,useRouter} from "vue-router"
四、Vuex
(1)userStore:获得vuex实例。
快速掌握Vue3:速成Vue3前端开发看这篇就够啦的更多相关文章
- .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了
作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第二章 入门篇-快速入门ASP.NET Core看这篇就够了
.NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.ht ...
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...
- Vue学习看这篇就够
Vue -渐进式JavaScript框架 介绍 vue 中文网 vue github Vue.js 是一套构建用户界面(UI)的渐进式JavaScript框架 库和框架的区别 我们所说的前端框架与库的 ...
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介
Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...
- 部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了
部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了 安大虎 momenta 中台开发工程师 6 人赞同了该文章 就目前的形势看,一家公司的运维体系不承载在 Do ...
- ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...
- 【转】ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
原文链接:https://www.cnblogs.com/yilezhu/p/9241261.html 引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必 ...
- 想了解SAW,BAW,FBAR滤波器的原理?看这篇就够了!
想了解SAW,BAW,FBAR滤波器的原理?看这篇就够了! 很多通信系统发展到某种程度都会有小型化的趋势.一方面小型化可以让系统更加轻便和有效,另一方面,日益发展的IC**技术可以用更低的成本生产 ...
- [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了
[译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...
随机推荐
- 百度飞桨(PaddlePaddle)- 张量(Tensor)
飞桨 使用张量(Tensor) 来表示神经网络中传递的数据,Tensor 可以理解为多维数组,类似于 Numpy 数组(ndarray) 的概念.与 Numpy 数组相比,Tensor 除了支持运行在 ...
- Vue2积分商城项目
一.清空项目非必要文件和用户片段,路径提示的配置 views 下面的文件只保留 Home.vue ,其余删除,删除 components/HelloWorld.vue,并且 Home.vue 中不再引 ...
- 2021-03-24:给定一个整数组成的无序数组arr,值可能正、可能负、可能0。给定一个整数值K,找到arr的所有子数组里,哪个子数组的累加和等于K,并且是长度最大的。返回其长度。
2021-03-24:给定一个整数组成的无序数组arr,值可能正.可能负.可能0.给定一个整数值K,找到arr的所有子数组里,哪个子数组的累加和等于K,并且是长度最大的.返回其长度. 福大大 答案20 ...
- 2021-03-08:在一个数组中,任何一个前面的数a,和任何一个后面的数b,如果(a,b)是降序的,就称为逆序对。返回逆序对个数。
2021-03-08:在一个数组中,任何一个前面的数a,和任何一个后面的数b,如果(a,b)是降序的,就称为逆序对.返回逆序对个数. 福哥答案2021-03-08: 1.归并排序,从右往左,相等拷右. ...
- CU002HModel matching query does not exist.
问题描述:CU002HModel matching query does not exist. 问题分析:匹配的查询不存在.顾名思义就是什么数据都没有. 原因是get查询时没有结果会报错,所以有两个选 ...
- 创建对象create()、批量创建bulk_create()、创建或更新update_or_create()、更新对象update()、更新或创建update_or_create()、删除对象delete()使用filter过滤、判断是否存在exists()、统计个数count()、聚合aggregate()
创建对象create().批量创建bulk_create().创建或更新update_or_create().更新对象update().更新或创建update_or_create().删除对象dele ...
- 【GiraKoo】面试者如何忽悠一个不懂技术的面试官
萌新面试者如何忽悠一个不懂技术的面试官 由于公司业务需要,做了几天Android的面试官. 作为一个完全没有做过Android项目的开发者,我无法问出具体的框架,技术细节. 对于萌新,新公司,新业务往 ...
- Java 世界的法外狂徒:反射
概述 反射(Reflection)机制是指在运行时动态地获取类的信息以及操作类的成员(字段.方法.构造函数等)的能力.通过反射,我们可以在编译时期未知具体类型的情况下,通过运行时的动态查找和调用. 虽 ...
- ES5 apply与call详解
虽然es6已经出台了很多简单的方法替代了apply和call,但是还是有很多老大项目使用到了es5的这些方法,所以对于这些方法的掌握是有必要的 先回顾一下官方对apply.call的诠释 apply方 ...
- Python连接es笔记一之连接与查询es
本文首发于公众号:Hunter后端 原文链接:Python连接es笔记一之连接与查询es 有几种方式在 Python 中配置与 es 的连接,最简单最有用的方法就是定义一个默认的连接,如果系统不是需要 ...