一、Vue3 介绍

# 新项目使用vue3,有部分老项目使用vue2
# vue3 的变化
1.性能的提升
-打包大小减少41%
-初次渲染快55%, 更新渲染快133%
-内存减少54%
2.源码的升级
使用Proxy代替defineProperty实现响应式
重写虚拟DOM的实现和Tree-Shaking
3.拥抱TypeScript
Vue3可以更好的支持TypeScript
4.新的特性
Composition API(组合API)
setup配置
ref与reactive
watch与watchEffect
provide与inject
新的内置组件
Fragment
Teleport
Suspense
#其他改变
新的生命周期钩子
data 选项应始终被声明为一个函数
移除keyCode支持作为 v-on 的修饰符
# vue3的优点:
# 性能方面
打包大小减少
初次渲染快 , 更新渲染快
内存减少
#源码方面
移除一些冷门 API,比如 filter、inline-template 等,体积减少
引入 tree-shaking 减少打包体积(通过编译阶段的静态分析,找到没有引入的模块并打上标记,并且移除)
使用 Proxy 代替 defineProperty 实现响应式。
Vue3 可以更好的支持 TypeScript
Composition API(组合 API)可以按需使用,多余勾子配置不用再次打包。
# 组合式API和配置项API
vue2 :配置项API
new Vue({
el:'#app', // vue2是通过配置来写的,以k:value形式来写
data:{}
})
vue3: 组合式API
let name='lqz'
let add=()=>{
}

二、vue3创建项目

1.还是用vue-cli

## 查看@vue/cli版本,确保@vue/cli版本在4.5.0以上
vue --version
## 安装或者升级你的@vue/cli
npm install -g @vue/cli
## 创建
vue create vue_test
## 启动
cd vue_test
npm run serve

2.借助vite

vite官网:https://vitejs.cn
介绍:https://cn.vitejs.dev/guide/why.html#the-problems 什么是vite?—— 新一代前端构建工具。
优势如下:
开发环境中,无需打包操作,可快速的冷启动。
轻量快速的热重载(HMR)。
真正的按需编译,不再等待整个应用编译完成,当你访问什么他才编译哪个
使用步骤
# npm 6.x
$ npm init vite@latest <project-name> --template vue
# npm 7+,需要加上额外的双短横线
$ npm init vite@latest <project-name> -- --template vue 去把依赖装好
$ cd <project-name>
$ cnpm install $ npm run dev ------启动项目
可以去package.json改

三、Setup的使用

​ Setup中没有this,使用变量直接使用


<template>
<div class="home">
<h3>setup的使用</h3>
<p>姓名:{{name}}</p>
<p>年龄:{{age}}</p>
<br>
<button @click="handleClick">点我</button>
<button @click="handleAdd">点我年龄+1</button>
</div>
</template> <script>
export default {
name:'HomeView',
// 以后配置项api不建议用了,使用组合式api,最核心就是setup函数
// 在setup里面写组合式api,setup 没有this了,使用 变量直接用就行了
setup(){
// 定义变量用let 常量用const
let name = 'xiao'
let age = 19
let handleClick = () =>{
alert('美女呀')
}
let handleAdd = () =>{
age++
console.log(age)
}
return {name,age,handleClick,handleAdd}
}
}
</script>

Setup的响应式

​ 因为作者的意图是,不想做响应式绑定的变量或者方法直接用就是,如果要做响应式,自己用ref 和reactive想绑定几个就绑定几个

​ 如果要给变量(数字、字符串之类的)做响应式,就使用ref 包裹,修改的时候用.value修改

​ 如果要给数组和对象类型做响应式,就使用reactive包裹,操作与读取数据均不需要.value

​ 如果api混用,配置项api中,可以使用setup中定义的变量和函数,直接this点就是,不过setup没法用配置项api中定义的,官方不推荐混用


<template>
<div class="home">
<h3>setup的使用</h3>
<p>姓名:{{name}}</p>
<p>年龄:{{age}}</p>
<br>
<button @click="handleClick">点我</button>
<button @click="handleAdd">点我年龄+1</button>
<button @click="handleName">点我名字后面+?</button>
<button @click="handleName2">点我名字2后面+?</button>
</div>
</template> <script>
import {ref,reactive} from 'vue'
export default {
name:'HomeView',
methods :{
handleName2(){
this.name = this.name + '?'
}
},
// 以后配置项api不建议用了,使用组合式api,最核心就是setup函数
// 在setup里面写组合式api,setup 没有this了,使用 变量直接用就行了
setup(){
// 定义变量用let 常量用const
let name = ref('xiao')
let age = ref(19) // 以后变成了RefIml对象,真正的值在values中
let userInfo = reactive({
name :'韩立',
gender:'男'
})
let handleClick = () =>{
alert('仙师啊')
}
let handleAdd = () =>{
age.value = age.value + 1
console.log(age)
}
let handleName = () =>{
name.value = name.value + '?'
console.log(name)
}
return {name,age,handleClick,handleAdd,handleName,userInfo}
}
}
</script>
总结:
ref定义的数据:操作数据需要.value,读取数据时模板中直接读取不需要.value。
reactive定义的数据:操作数据与读取数据:均不需要.value

四、toRefs


import {toRefs, reactive} from 'vue'
# 以后setup的返回值可以直接使用
setup() {
let data = reactive({
name: 'lqz',
age: 19,
gender: '男'
})
return {...toRefs(data)}
}
# 以后在模板中直接用 {{name}} 不用再data.name
#其实......toRefs就是干了打散对象的数据解构赋值

五、Vue3的计算属性和监听属性

1.计算属性

​ vue3中,因为不用写配置项,要写个函数,这里还补充一下,计算属性可以也联动改变量值,用set方法

# computed 的配置项中的写法,不建议用了
computed:{
fullName(){
return this.firstName+this.lastName
}
}, # vue3 新写法
let person = reactive({
firstName: '',
lastName: '',
})
let fullName = computed(() => {
return person.firstName + person.lastName
}) # 计算属性取值和修改值
let fullName = computed({
get() {
return person.firstName + person.lastName
},
set(value) {
person.firstName = value.slice(0, 1)
person.lastName = value.slice(1)
},
})

2.监听属性

​ 也很简单,不是写配置项的形式,写函数的形式,记得导入一下

​ vue3还提供了watchEffect ,也监听,只要里面的变量发生变化,他就触发执行

<template>
<div class="home">
<h1>监听属性</h1> {{ name }}----{{ age }}
<button @click="handleChange">点我name+?</button>
<button @click="age++">点我年龄+</button> </div>
</template> <script>
import {ref, reactive, computed, watch, watchEffect} from 'vue' export default {
name: 'HomeView', setup() { let name = ref('lqz')
let age = ref(10)
// 只要name发生变化,就触发某个东西的执行
watch(name, (newName, oldName) => {
console.log('name变了')
console.log('老的', oldName)
console.log('新的', newName)
})
let handleChange = () => {
name.value = name.value + '?'
} // watchEffect vue3 提供的,它也做监听属性用,只要这个里面用的变量发生变化,他就会执行
watchEffect(() => {
console.log('xxxx')
console.log(age.value)
}) return {name, handleChange, age} }
}
</script>

六、Vue3的生命周期

变化:

vue2 vue3
beforeCreate beforeCreate
created created
beforeMount beforeMount
mounted mounted
beforeUpdate beforeUpdate
updated updated
beforeDestroy beforeUnmount
destroyed unmounted

写法:

​ 都需要从vue里面导一下

钩子 写法
beforeCreate 直接写setup()里面,写开头
created 直接写setup()里面,写开头
onBeforeMount setup()里面,函数的写法
onMounted setup()里面,函数的写法
onBeforeUpdate setup()里面,函数的写法
onUpdated setup()里面,函数的写法
onBeforeUnmount setup()里面,函数的写法
onUnmounted setup()里面,函数的写法

和后端交互

​ 直接写在setup()开头就行,发axios

比如说:
setup(){
let show = ref(false)
axios.get('url').then(res=>{
show.value=res.data.isShow
})
}

七、Setup简洁用法

​ 可以直接在script标签中加一个属性,这样在script中直接写变量,函数等等,连setu()都可以省略了,不用再return

​ 如果是导组件,直接导,甚至不用再配component,被导的组件也不用再写导出配置

<template>
<div class="home">
{{ name }}--------{{ age }}
<br>
<hr>
<button @click="handleClick">点我弹个窗</button> </div>
</template> <script setup>
import {ref} from 'vue'
let name='jack'
let age=20
let handleClick=()=>{
alert(name)
} </script>

前端之Vue day08 Vue3项目搭建、setup、toRefs的更多相关文章

  1. 从零搭建基于webpack的Electron-Vue3项目(1)——基于webpack的Vue3项目搭建

    从零搭建基于webpack的Electron-Vue3项目(1)--基于webpack的Vue3项目搭建 前言 本篇文章内容,主要是基于webpack的Vue3项目开发环境进行搭建,暂时还不涉及到El ...

  2. Vue3项目搭建规范

    Vue3项目搭建规范 一. 代码规范 1.1 集成editorconfig配置 EditorConfig有助于为不同IDE编辑器上维护一致的编码风格 安装插件:EditorConfig for VS ...

  3. vuejs学习——vue+vuex+vue-router项目搭建(三)

    前言 vuejs学习——vue+vuex+vue-router项目搭建(一) vuejs学习——vue+vuex+vue-router项目搭建(二) 为什么用vuex:组件之间的作用域独立,而组件之间 ...

  4. vuejs学习——vue+vuex+vue-router项目搭建(二)

    前言 最近比较忙,所有第二章发布晚了,不好意思各位. vuejs学习——vue+vuex+vue-router项目搭建(一) 中我们搭建好了vue项目,我相信大家已经体验了vue其中的奥妙了,接下来我 ...

  5. vuejs学习——vue+vuex+vue-router项目搭建(一)

    前言 快年底了却有新公司邀请了我,所以打算把上家公司的学到一下技术做一些总结和分享. 现在vuejs都2.0了,我相信也有很多朋友和我一样实际项目还是选择vue1.0的或者给新手一些参考,不管在选择哪 ...

  6. vue多页面项目搭建(vue-cli 4.0)

    1.创建vue项目 cmd命令执行 vue create app (app 自定义的项目名) 一般都会选择后者,自己配置一下自己需要的选项(空格为选中) 这是我个人需要的一些选项,路由Router.状 ...

  7. Vue -cli 入门 --项目搭建(一)

    一. 安装node.js环境. 在node.js官网下载稳定版本(https://nodejs.org/en/) 下载完成后点击安装,安装过程很简单,一直next即可,安装完成会自动添加node及np ...

  8. vue全家桶项目搭建(vue-cli 2.9.6+vue-router+vuex+axios)

    一.安装vue-cli + vue-router + vuex + axios 1.安装vue-cli 2.创建项目 3.安装vuex和axios 二.搭建项目目录结构,如下所示: 1.assets目 ...

  9. Vue nodejs商城项目-搭建express框架环境

    1.express-project 搭建express框架环境 安装express generator生成器 通过生成器自动创建项目 配置分析 安装 cnpm i -g express-generat ...

  10. VUE+Ionic,项目搭建&打包成APK

    安装Vue&创建Vue工程 1.安装Vue CLI: npm install -g vue-cli 2.创建新的Vue项目,创建最后一步会提醒是否使用npm install 自动安装,如果选择 ...

随机推荐

  1. LeetCode_单周赛_327

    目录 6283. 正整数和负整数的最大计数 代码 6285. 执行 K 次操作后的最大分数 代码 6284. 使字符串总不同字符的数目相等 代码 6283. 正整数和负整数的最大计数 代码 直接遍历统 ...

  2. 一个容器,但是一整个k8s集群

    你可能需要一个快速启动和销毁的 k8s 集群:你可能在资源受限的环境中运行 k8s 集群:你可能是一个完全的初学者,觉得搭建完整的 k8s 套件太难.那么这篇短文可能可以帮到你. 各种丐版 k8s 集 ...

  3. 亲测有效! Wondershare UniConverterV14.1.7 Wondershare PDFelement Professional V9.3.3 含(win/mac版)

    亲测有效!  Wondershare UniConverterV14.1.7  Wondershare PDFelement Professional V9.3.3 含(win/mac版) Wonde ...

  4. .NET微服务系统迁移至.NET6.0的故事

    本次迁移涉及的是公司内部一个业务子系统,该系统是一个多样化的应用,支撑着公司的多个业务方向.目前,该系统由40多个基于.NET的微服务应用构成,使用数千个CPU核心和数TB内存,在数百个Linux容器 ...

  5. Os-Hax

    Os-Hax 目录 Os-Hax 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 1.2.1 目录分析 2 反弹Shell 3 提权 3.1 尝试提权 3.2 收集当前系统信息 3.3 利用su ...

  6. 解决.Net Core3.0 修改cshtml代码之后必须重新生成才可以看到效果

    1.安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包 2.在Startup中ConfigureServices方法里面加入services.Ad ...

  7. PostgreSQL建立索引时,如何避免写数据锁定

    先介绍一下Postgresql的建索引语法: CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ name ] ON table [ USING method ] ( ...

  8. Java/.Net双平台核心,Jvm和CLR运行异同点

    前言: 本篇以.Net 7.0.2 CLR 和 OpenJDk19参照,解析下它们各自调用函数的异同. 以下为个人理解. 概述 JDK大约5.9G,CLR大约7.6G,两者相差1.7G左右. root ...

  9. C# WCF实现聊天室功能

    1.WCF是什么 Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架 看这篇文章之前,可以先看我的另一篇文章,初步了解一下WCF: ...

  10. php链接access并查询列出

    <?php$odbc = "Driver={Microsoft Access Driver (*.mdb)};Dbq=".realpath("db.mdb" ...