vue框架08 vue3
vue3的介绍
# vue项目的版本,新项目使用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
5.新的内置组件
- Fragment
- Teleport
- Suspense
6.其他改变
- 新的生命周期钩子
- data 选项应始终被声明为一个函数
- 移除keyCode支持作为v-on的修饰符 # 组合式API和配置项API
vue2:配置项API
new Vue({
el:'#app',
data:{}
})
vue3: 组合式API
let name='tom'
let add=()=>{}
vue3创建项目
# 2.1 使用vue-cli
- 创建的过程和vue2一样,只是在选在版本的时候选择vue3
- 创建完成,使用pycharm打开,并且运行 # 2.2 vite
- 新建的前端构建工具,最大的优势就是速度快
https://cn.vuejs.org/guide/scaling-up/tooling.html#project-scaffolding
- 使用步骤:
1.安装:
npm init vue@latest
2.按需选择vueRouter
3.cd到项目中执行
cnpm install
4.运行:
npm run dev
"""
vueRouter:跟之前一样
Pinia:用来替换Vuex的,新一代的状态管理器
链式调用(抽时间)
"""
- 速度快的原因:
1.创建项目快:
不用安装第三方依赖
2.执行快的原因:
热更新,按需编译
setup函数
# vue2创建vue实例和vue3创建vue实例的区别
- 1. vue2创建vue实例:
new Vew() ---->是Vue的实例,里面有$store,$refs...
createApp(App) ---->是个对象,对象里有东西,没有$store,$refs...,以后有用都是导入使用
- 2. vue3创建vue实例:
以后vue3 的<template>,不需要写一个标签了。
以后都写在setup函数中,定义变量,定义函数,一定要return,在templage中才能使用
失去了响应式
ref和reactive
# 有响应式
- 定义变量,有响应式就用 ref包裹起来,
- 修改变量,需要用 变量名.value 修改 # 配置项api和组合式api可以混写(不建议)
- 在前在data中定义的变量
- 在setup中定义的变量
- 总结:
在setup中定义的变量和函数,在之前配置项api中可以直接使用this.变量,函数调用即可
原来配置项中定义的变量,函数,在setup中无法使用 # 不同类型做响应式
- ref通常用来包裹,数字,字符串类型,以后使用 xx.value
- reactive用来包裹数组和对象类型 以后使用 直接用即可 # 总结
- ref定义的数据:操作数据需要.value,读取数据时模板中直接读取不需要.value。
- reactive定义的数据:操作数据与读取数据:均不需要.value
# setup,ref和reactive 代码实操
<template>
<div class="home">
<h1>setup的使用</h1>
<p>姓名:{{name}}</p>
<p>年龄:{{age}}</p>
<button @click="handleClick">点我看美女</button>
<button @click="handleAdd">点击增加年龄</button>
<button @click="handleName">点击名字加?</button>
<button @click="handleName2">点击名字加?2</button>
<br>
{{userInfo.name}}
{{userInfo.gender}}
<br>
<button @click="handleMessage">点击修改吴彦祖性别</button>
</div>
</template>
<script>
import {ref,reactive} from 'vue'
export default {
name: 'HomeView',
methods:{
handleName2(){
this.name=this.name+'?'
console.log(this.name)
}
},
setup(){
let name =ref('lqz')
let age = ref(19)
let handleClick =()=>{
alert('猛男')
}
let handleAdd =()=>{
age.value = age.value+1
console.log(age) // 添加ref后打印出来直接是一个value对象
}
let handleName =()=>{
name.value = name.value+'?'
console.log(name) // 添加
}
// let userInfo = {
// name:'吴彦祖',
// gender:'male',
// }
// let userInfo =ref({
// name:'吴彦祖',
// gender:'male',
// })
let userInfo =reactive({
name:'吴彦祖',
gender:'male',
})
// let handleMessage =()=>{
// userInfo.value.gender = '未知'
// }
let handleMessage =()=>{
userInfo.gender = '未知'
}
return {name,age,handleClick,handleAdd,handleName,userInfo,handleMessage}
}
}
</script>
计算属性和监听属性
计算属性
# 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)
},
})
监听属性
# 组合式api写法,只要name发生变化,就会触发匿名函数执行
let name = ref('lqz')
watch(name, (newName, oldName) => {
console.log('name变了')
console.log('老的', oldName)
console.log('新的', newName)
}) # watchEffect 用法,只要age变化,就会执行,age不变化,就不会执行
watchEffect(() => {
console.log(age.value)
})
生命周期
# vue3的变化,不推荐了
-vue2 和 vue3比较
beforeCreate===>beforeCreate
created=======>created
beforeMount ===>beforeMount
mounted=======>mounted
beforeUpdate===>beforeUpdate
updated =======>updated
beforeDestroy ==>beforeUnmount
destroyed =====>unmounted # 不推荐用这种写法了,配置项写法,统统写在setup中
beforeCreate===>setup()
created=======>setup()
beforeMount ===>onBeforeMount
mounted=======>onMounted
beforeUpdate===>onBeforeUpdate
updated =======>onUpdated
beforeUnmount ==>onBeforeUnmount
unmounted =====>onUnmounted # 以前写在created中的代码,现在直接写在setup开始即可
let show = ref(false)
axios.get().then(res=>{
show.value=res.data.show
})
toRefs
# 以后setup的返回值可以直接使用
setup() {
let data = reactive({
name: 'lqz',
age: 19,
gender: '男'
})
return {...toRefs(data)}
}
# 以后在模板中直接用 {{name}}
script setup的作用和lang=ts
<script setup>
import {ref} from 'vue'
let name = ref('lqz')
let handleClick = () => {
alert('美女')
}
</script> # 以后 这个script中的代码直接放到 setup函数中,不用return了 #lang=ts
里面代码使用ts写,而ts完全兼容js,继续写js代码没问题
# 公司内部项目,会写后台管理,往上有很多vue开源的后台管理的框架,咱们只需要在上面做二次开发
# django-vue-admin 前端---》D2Admin
# 若依:vue前端 用来 vue-element-admin
# elamin前端 drf 写了基于rbac权限管理的框架
# https://gitee.com/liuqingzheng/vue_admin
vue后台管理模板
vue框架08 vue3的更多相关文章
- vue 进阶学习(一): vue 框架说明和与其他框架的对比
vue 框架说明和与其他框架的对比 一.说明 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与第三 ...
- Vue框架Element的事件传递broadcast和dispatch方法分析
前言 最近在学习饿了么的Vue前端框架Element,发现其源码中大量使用了$broadcast和$dispatch方法,而Element使用的是Vue2.0版本,众所周知在Vue 1.0升级到2.0 ...
- 使用vue框架运行npm run dev 时报错解决
使用使用vue框架运行npm run dev 时报错 如下: 原因: localhost:8080 有可能其他软件占用了,导致其他问题的出现 我们可以动态修改地址 解决: 进入项目文件的config文 ...
- Vue框架下的node.js安装教程
Vue框架下的node.js安装教程 python服务器.php ->aphche.java ->tomcat. iis -->它是一个可以运行JAVASCRIPTR 的运行环 ...
- Vue框架axios请求(类似于ajax请求)
Vue框架axios get请求(类似于ajax请求) 首先介绍下,这个axios请求最明显的地方,通过这个请求进行提交的时候页面不会刷新 <!DOCTYPE html> <html ...
- Vue框架之双向绑定事件
Vue框架之双向绑定事件 首先介绍下Vue框架的语法 vue通过 {{temp}} 来渲染变量 {{count+100}} # 求和 v-text # 为标签插入text文本 v-html # 为标签 ...
- Vue框架
Vue框架 环境: windows python3.6.2 Vue的cdn: <script src="https://cdn.jsdelivr.net/npm/vue"&g ...
- vue框架入门和ES6介绍
vue框架入门和ES6介绍 vue-mvvm模式,vue是一种轻量级的前端框架,主要为模板渲染,数据同步,组件化,模块化,路由等. https://cn.vuejs.org/ 源码:https://g ...
- 基于VUE框架 与 其他框架间的基本对比
基于VUE框架的基本描述 与 其他框架间的基本对比 2018-11-03 11:01:14 A B React React 和 Vue 有许多相似之处,它们都有: 使用 Virtual DOM 提供 ...
- VUE框架的初识
VUE框架的初识 初步了解Vue.js框架(渐进式前端框架) Vue.js是一种轻量级的前端MVVM框架.同时吸收了React(组件化)和Angular(灵活指令页面操作)的优点.是一套构建用户界面的 ...
随机推荐
- 【转载】ADOX.Catalog中文帮助详细说明chm文档
首先给个完全版的地址,如果您机器上装过OFFICE应该可以打开的:ADOX 对象模型, 地址是:"C:\Program Files\Common Files\Microsoft Shared ...
- (一)elasticsearch 编译和启动
1.准备 先从github官网上clone elasticsearch源码到本地,选择合适的分支.笔者这里选用的是7.4.0(与笔者工作环境使用的分支一致),此版本编译需要jdk11. 2.编译 Re ...
- 我的基于 JamStack 的新博客
概述 今天心血来潮,介绍一下我的新博客站点 -- https://EWhisper.cn. 我是做基础平台 PaaS 运维和架构的,挺喜欢把工作中学到的新知识写下来.记笔记,突然有一天就抱着「资源共享 ...
- Blazor WebAssembly的初次访问慢的优化
Blazor WebAssembly初次访问需要加载很多dll,体积较大,因此第一次加载比较慢. 针对此问题Microsoft提供了优化方案:压缩 https://learn.microsoft.co ...
- Linux基础操作-01
Linux操作系统 很多IC设计的EDA工具都是在Linux系统中进行运行的,在IC设计的从业者都需要熟练掌握Linux操做.可以不掌握Linux原理,但是操作要熟练. Linux 操作系统的特点 多 ...
- Java List集合排序
二维 List 自定义排序 使用lambda表达式 import java.util.*; public class Main { public static void main(String[] a ...
- echart大坑总结~~echarts呈现的数据刷新不完全/echarts画图时tooltip不会更新
谨以此文记录在使用echarts中遇到的各种大坑或者小坑,陆续更新加入新坑 欢迎朋友们一起提坑,我们势必绕过它们,愿我们永不再入坑~ 坑一:echarts图表重新赋值数据,图表显示会存在一部分原来的数 ...
- 流思想概述-两种获取Stream流的方式
流思想概述 注意:请暂时忘记对传统IO流的固有印象 ! 整体来看,流式思想类似与工厂车间的 '生产流水线'. 当需要对多个元素进行操作(特别是多步操作)的时候,考虑到性能及便利性,我们应该首先拼好一个 ...
- Java 进阶P-4.2+P-4.3
继承 什么是继承:通俗易懂就好像是你继承你了爸的财产,其中你是子类,你爸是父类继承在Java中被称为面向对象的三大的特征,其中他表示的是,从已有的类中派生出新的类,新的类拥有了父类中属性和方法(pri ...
- 从 Cloud-Native Relational DB 看数据库设计
论文内容:Amazon Aurora: Design Considerations for HighThroughput Cloud-Native Relational Databases 里面介绍了 ...