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(灵活指令页面操作)的优点.是一套构建用户界面的 ...
随机推荐
- Transition 初步使用
Transition Vue 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加进入/离开过渡: 条件渲染 (使用 v-if) 条件展示 (使用 v-show) 动态组件 ...
- Solon Java Framework v1.12.0 发布
一个更现代感的 Java 应用开发框架:更快.更小.更自由.没有 Spring,没有 Servlet,没有 JavaEE:独立的轻量生态.主框架仅 0.1 MB. @Controller public ...
- 一步步教你在Edge浏览器上安装网风笔记
微软于2022年6月15日正式结束对浏览器"Internet Explorer (IE)"的支持,IE已正式退出历史舞台,取而代之的是目前风头正盛的被微软称为当今最好用的Edge浏 ...
- 为什么要虚拟化,为什么要容器,为什么要Docker,为什么要K8S?
前言 如标题中的问题所提到的虚拟化,容器,Docker和K8s那样,我们不妨这样问:这些技术到底适用于哪些场景,有没有别的技术可以替代?这些技术的优劣在哪里? 下面我将针对性地从以上几个问题的出发点, ...
- 【随笔记】全志平台 gpio-leds 驱动应用
硬件信息 内核版本:Linux 4.9 硬件原理: GPIO 通过一颗 MOS 管(2N7002ET1G),接到 LED 负极,LED 正极接电源. GPIO 通过拉高导通 MOS ,将 LED 接地 ...
- 【Django drf】视图类APIView之五层封装 ApiView的类属性 drf配置文件
目录 ApiView的类属性 drf 配置文件之查找顺序 drf之请求 APIView之请求相关配置 drf之响应 APIView之响应相关配置 Response对象属性 视图类 序列化类 路由 基于 ...
- 如何注册chatgpt,如何使用chatgpt,以及chatgpt无法访问的原因。chatgpt问题总结。
chatgpt显示所在的国家地区不可用的原因. 1:chatgpt国内是不能访问的,是需要借助魔法. 一.注册过程中的问题. \1. OpenAI或ChatGPT官网打不开.这是由于ChatGPT目前 ...
- Google Guice 用户指南 - Ⅰ:概览
译者:kefate 原文:https://github.com/google/guice/wiki/Overview 大家好,我是kefate.今天开始我将会把Google Guice的官方文档陆续翻 ...
- Opengl ES之踩坑记
前因 最近在尝试使用Opengl ES实现一些LUT滤镜效果,在实现这些滤镜效果的时候遇到一些兼容性的坑,踩过这些坑后我希望把这几个坑分享给读者朋友们, 希望同在学习Opengl ES的朋友们能少走弯 ...
- .net core 从(本地)服务器获取APK文件并解析APK信息
1.apk解析除了使用客户端利用aapt.exe.unzip.exe开发客户端解析外,还可以直接利用服务进行解析 /// <summary> /// 从本地服务器获取APK文件并解析APK ...