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的更多相关文章

  1. vue 进阶学习(一): vue 框架说明和与其他框架的对比

    vue 框架说明和与其他框架的对比 一.说明 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与第三 ...

  2. Vue框架Element的事件传递broadcast和dispatch方法分析

    前言 最近在学习饿了么的Vue前端框架Element,发现其源码中大量使用了$broadcast和$dispatch方法,而Element使用的是Vue2.0版本,众所周知在Vue 1.0升级到2.0 ...

  3. 使用vue框架运行npm run dev 时报错解决

    使用使用vue框架运行npm run dev 时报错 如下: 原因: localhost:8080 有可能其他软件占用了,导致其他问题的出现 我们可以动态修改地址 解决: 进入项目文件的config文 ...

  4. Vue框架下的node.js安装教程

    Vue框架下的node.js安装教程 python服务器.php  ->aphche.java ->tomcat.   iis -->它是一个可以运行JAVASCRIPTR 的运行环 ...

  5. Vue框架axios请求(类似于ajax请求)

    Vue框架axios get请求(类似于ajax请求) 首先介绍下,这个axios请求最明显的地方,通过这个请求进行提交的时候页面不会刷新 <!DOCTYPE html> <html ...

  6. Vue框架之双向绑定事件

    Vue框架之双向绑定事件 首先介绍下Vue框架的语法 vue通过 {{temp}} 来渲染变量 {{count+100}} # 求和 v-text # 为标签插入text文本 v-html # 为标签 ...

  7. Vue框架

    Vue框架 环境: windows python3.6.2 Vue的cdn: <script src="https://cdn.jsdelivr.net/npm/vue"&g ...

  8. vue框架入门和ES6介绍

    vue框架入门和ES6介绍 vue-mvvm模式,vue是一种轻量级的前端框架,主要为模板渲染,数据同步,组件化,模块化,路由等. https://cn.vuejs.org/ 源码:https://g ...

  9. 基于VUE框架 与 其他框架间的基本对比

    基于VUE框架的基本描述 与 其他框架间的基本对比 2018-11-03  11:01:14 A B React React 和 Vue 有许多相似之处,它们都有: 使用 Virtual DOM 提供 ...

  10. VUE框架的初识

    VUE框架的初识 初步了解Vue.js框架(渐进式前端框架) Vue.js是一种轻量级的前端MVVM框架.同时吸收了React(组件化)和Angular(灵活指令页面操作)的优点.是一套构建用户界面的 ...

随机推荐

  1. 【转载】VFP编写DLL,并调用

    1. 编制DLL文件 ,保存为Temp.prg Define Class vfptools As Session OlePublic    Procedure Add As Integer    Lp ...

  2. Potree 002 Desktop开发环境搭建

    1.工程创建 我们使用Visual Studio 2022开发,把下载好后的PotreeDesktop源码添加到Visual Studio中. 打开Visual Studio 2022,新建Asp.N ...

  3. Git和Maven的学习笔记

    Git 1.Git简介 Git 是一个免费的.开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种 项目. Git 易于学习,占地面积小,性能极快. 它具有廉价的本地库,方便的暂存区域和多个 ...

  4. MySQL join语句怎么优化?

    在MySQL的实现中,Nested-Loop Join有3种实现的算法: 1. Simple Nested-Loop Join:简单嵌套循环连接 2. Block Nested-Loop Join:缓 ...

  5. Flutter帧率监控 | 由浅入深,详解获取帧率的那些事

    前言 做线上帧率监控上报时,少不了需要弄明白如何通过代码获取实时帧率的需求,这篇文章通过图解配合Flutter性能调试工具的方式一步步通俗易懂地让你明白获取帧率的基础知识,以后再也不愁看不懂调试工具上 ...

  6. win32com操作word API精讲 第六集 Range(四)对齐和缩进

    本课程<win32com操作word API精讲&项目实战>同步在B站.今日头条.视频号及本公众号发布.其中本公众号以发布文字教程为主. 今天是大年初二,一灯在此祝愿各位朋友兔年吉 ...

  7. Linux简易入门

    安装Linux系统 VMware安装 首先安装VMware VMware下载地址 在镜像网站下载镜像,直接进行安装 虚拟机安装 镜像下载地址 这里使用\(16.04\)版本 点击创建新的虚拟机 根据向 ...

  8. JDK9对集合添加的优化-Debug追踪

    JDK9对集合添加的优化 通常,我们在代码中创建一个集合(例如,List或Set ),并直接用一些元素填充它.实例化集合,几add方法调用,使得代码重复. package A_Lian_one.dem ...

  9. SQLSERVER 快照隔离级别 到底怎么理解?

    一:背景 1. 讲故事 上一篇写完 SQLSERVER 的四个事务隔离级别到底怎么理解? 之后,有朋友留言问什么时候可以把 snapshot 隔离级别给补上,这篇就来安排,快照隔离级别看起来很魔法,不 ...

  10. django框架之drf(部分讲解)

    一.各个视图子类 两个视图基类 五个视图扩展类 九个视图子类----->视图类,不需要额外继承GenericAPIView,只需要继承九个州其中之一,就会有某个或某几个接口 路由 urlpatt ...