vue3的优点:
Composition API
组合 API首先理解一下vite 构建工具:
vite是一种新型前端构建工具,能够显著提升前端开发体验。
对比 webpack:
而vite 的原理是:
基于 webpack
构建项目 与 基于 vite
构建项目,谁更快体验更好?vite
基于 webpack
的 vue-cli
也可以创建 vue 项目,只是慢一点而已。
6.进入项目目录,安装依赖,启动项目即可。npm i pnpm run dev或npm run dev启动项目
Vue3提供两种组织代码逻辑的写法:
选项式API
写法组合式API
写法一、组合式api
二、生命周期函数
Vue2和Vue3生命周期对比
三、Vue3常用核心语法
1.setup函数
特点:
(1)setup函数是vue的特有选项,是组合式api的入口函数
(2)从生命周期看,它在beforeCreate之前执行
(3)作为入口函数,必须要有return
(4)没有this值
注:setup 中返回的对象数据不是响应式的,需要使用ref和reactive转成响应式
代码示例:
===vue3
===={{ num }}
===={{ obj.age }}==={{ obj.name }}
2.setup语法糖:
作用:简化 setup 固定代码 ,让代码更简洁
使用:
(1)直接在script标签里面写setup 不用return 和 export default
(2)导入组件之后可以直接使用,不用注册
代码示例:
===vue3
===={{ num }}
===={{ obj.age }}==={{ obj.name }}
3.ref函数
作用:
(1)定义响应式数据,所有数据类型都可以使用(除复杂数据类型外,其他数据类型常用ref( ) )
使用步骤:
1.从vue中导入ref
2.在 setup 函数中,使用 ref 函数,传入数据,返回一个响应式数据
3.使用 ref 创建的数据,js 中需要 .value来取值 ,template模板 中可省略
(2)获取DOM元素,相当于Vue2中的自定义指令
使用步骤:
1.从vue中导入ref
2.模板中建立关联: ref="自定义属性名"
3.使用: 自定义属性名.value
代码示例:
生命周期函数
我是标题h1
4.reactive函数
作用:定义复杂数据类型的响应式数据,不能定义简单数据类型
使用步骤:
1.从vue中导入 reactive
2.在 setup 函数中,使用 reactive 函数,传入复杂数据类型数据,返回一个响应式数据
3.使用 reactive 创建的数据,js 和 template 模板中都可以直接使用
5.computed函数
作用:计算属性
使用步骤:
1.从vue中导入 computed
2.在 setup 函数中,使用 computed 函数,参数是一个函数,函数返回计算好的数据
3.计算好的数据在 js 中需要.value取值,template 模板中可以直接使用
代码示例:
御剑乘风来,除魔天地间!===vue3
======{{ total }}======={{ arr }}
6.watch函数
作用:监听数据的变化
使用步骤:
1.从vue中导入 watch
2.在 setup 函数中,使用 watch 函数,参数有以下几种情况:
(1)监听简单数据类型,参数为:值,(newVal,oldVal)=> { } ,配置项
(2)监听复杂数据类型,参数为:值,(newVal)=> { } ,配置项
(3)监听对象中某个属性,参数为:()=>对象.属性,(newVal,oldVal)=> { } ,配置项
(4)同时监听多个数据,参数为:[数据1,数据2...],(newVal,oldVal)=> { } ,配置项
代码示例:
(1)监听简单数据类型
// watch(需要监听的数据||函数,数据改变执行函数,配置对象) 来进行数据的侦听
// 1 使用 watch 监听一个简单数据类型
import {ref,watch } from 'vue'
let num=ref(0)
// setTimeout只执行一次
setTimeout(()=>{
num.value++
},1000)
// 监听num的变化
watch(num,(nerval,olduvai)=>{
console.log(nerval,olduvai,'num发生改变了');
})
(2)监听复杂数据类型
// 2 使用 watch 监听响应式对象数据中的一个属性(简单)
import {reactive,watch } from 'vue'
let obj=reactive({age:18,name:'jack'})
const btn=()=>{
obj.age+=2
obj.name='rose'
}
// 监听obj的变化 ,监听复杂数据类型的时候,只有新值newVal,没有旧值oldVal
watch(obj,(newVal)=>{
console.log(obj,newVal);
})
(3)监听对象中某个属性
//3 使用 watch 监听响应式对象数据中的一个属性(监听复杂数据类型)
import { reactive, watch } from "vue";
const obj = reactive({
num: 33,
info: {
name: "jack",
age: 18,
},
});
const btn=()=>{
obj.num+=10
obj.info.age+=2
obj.info.name='rose'
}
watch(()=>obj.info.age,(newVal,oldVal)=>{
console.log(obj.info.age,obj.info.name,newVal,oldVal);
})
(4)同时监听多个数据
// 4 使用 watch 监听多个数据
import {ref,reactive,watch } from 'vue'
let num=ref(1)
let obj=reactive({age:18,name:'jack'})
const btn=()=>{
num.value+=1
obj.age+=2
obj.name='rose'
}
// 同时监听多个数据类型 newVal是一个数组
watch([()=>obj.age,num],(newVal,oldVal)=>{
console.log('111',newVal,oldVal);
})
7.ref操作组件-defineExpose函数
作用:使用
我是父组件===vue3
子组件示例代码:
我是子组件===Son03
孙组件示例代码:
我是sun组件===sun
{{ newCount }}
{{ newObj }}
{{ newAddFn }}
11.保持响应式 toRefs函数
作用:在使用reactive创建的响应式数据被展开或解构的时候使用toRefs保持响应式
使用步骤:
1.从 vue 中导出 toRefs 函数
2.将被展开或解构的数据作为参数传入toRefs 函数
3.解构后的数据是一个变量,依然可以保持响应式,但js中需要通过.value取值,模板中不用
御剑乘风来,除魔天地间!===vue3
===姓名:{{name}}===年龄:{{ age }}===性别:{{ gender }}