vue3.0組合式api的使用小結
vue2開發缺點和vue3開發優點
- vue2代碼冗餘,雜亂
- vue3則可以把相關的功能代碼抽離分割在一起,方便開發者快速閱讀
1.setup使用
- setup函數是 Composition API(組合API)的入口
- setup是啟動頁面後會自動執行的一個函數
- 項目中定義的所有變量,方法等都需要在setup中
- 在setup函數中定義的變量和方法最後都需要 return 出去, 否則無法在視圖層中使用
setup(){ console.log('自動執行') const name = '林一' const age = 20 const company = '阿裡巴巴' const btn = ()=>{ const res = `我叫${name},今年${age}歲瞭,在${company}上班` console.log(res) } // 計算屬性 // 偵聽器 return {name,btn} }
2.生命周期函數
- onBeforeMount —— 在掛載開始之前被調用
- onMounted —— 組件掛載時調用
- onBeforeUpdate —— 數據更新時調用
- onUpdated —— 數據更改導致的虛擬 DOM 重新渲染,在這之後會調用該鉤子
- onBeforeUnmount —— 在卸載組件實例之前調用
- onErrorCaptured —— 當捕獲一個來自子孫組件的錯誤時被調用
Vue應用程序中有4個主要事件
- 創建 — 在組件創建時執行
- 掛載 — DOM 被掛載時執行
- 更新 — 當響應數據被修改時執行
- 銷毀 — 在元素被銷毀之前立即運行
import { onBeforeMount, ....... } from 'vue'
3.vuex
- 同vue2一致
- 需要安裝,引入
//安裝 npm install vuex@next --save //引入 import {useStore} from 'vuex'
4.toRef介紹
- toRef也可以創建一個響應式數據
- ref本質是拷貝粘貼一份數據,脫離瞭與原數據的交互
- ref函數將對象中的屬性變成響應式數據,修改響應式數據是不會影響到原數據,但是會更新視圖層
- toRef的本質是引用,與原始數據有交互,修改響應式數據會影響到原數據,但是不會更新視圖層
- 使用需引入
import {toRef} from 'vue' //toRef接收兩個參數,第一個參數是要操作的對象,第二個參數是對象的某個屬性 const obj = {name:'林一'} toRef(obj,'name')
setup(){ const obj = {name:'林一',age:40} // const res = ref(obj.name) const res = toRef(obj,'name') const btn = ()=>{ res.value = '林二' console.log(res) console.log(obj) } return {res,btn} }
5.ref介紹
- ref 為我們的值創建瞭一個響應式引用
- 使用需引用
import {ref} from 'vue'//組合式api ref('林一')
- 當ref裡的值發生改變時,視圖層會自動更新
- ref可操作基本數據類型,也可以操作復雜數據類型:對象,數組
- 建議:ref用來操作基本數據類型:數字,字符串
setup(){ const name = ref('林一') const age = ref(52) const company = ref('阿裡巴巴') // 對象類型 const obj = ref({ taobao:'淘寶', tamll:'天貓' }) // 數組類型 const arr = ref([ { xiami:'林二', huabei:'京東' } ]) const btn = ()=>{ // 響應對象類型 // name.value = '林三' // obj.value.taobao = '淘寶000' // console.log(obj) // 響應數組類型 arr.value[0].xiami = '京東000' console.log(arr) } return {name,age,company,btn,obj,arr} }
6.組件傳值
//第一種:進入頁面即刻傳值(祖孫傳值) const p1 = reactive({name:'林一',age:52}) provide('p',p1)//祖傳 const res = inject('p')//孫收 //第二種:點擊傳值 <Vue ref="val"/>//引入子組件,使用ref調用該子組件 const val = ref() const p1 = reactive({name:'林一',age:52}) function btn(){ val.value.receive(p1) }
7.shallowRef和shallowReactive
- shallowRef隻處理基本類型數據
- shallowReactive隻處理第一層數據
- 使用需引入
import { shallowReactive,shallowRef } from 'vue'
setup() { //shallowReactive:隻處理第一層的數據 const p1 = shallowReactive({ name:'林一', product:{ taobao:5 } }) // shallowRef:隻處理基本類型數據 const p2 = shallowRef({ val:1 }) console.log(p2) return{...toRefs(p1),p2} },
8.watchEffect
- watchEffect 如果存在的話,在組件初始化的時候就會執行一次用以收集依賴
- watch 可以獲取到新值與舊值(更新前的值),而 watchEffect是拿不到的
- watchEffect不需要指定監聽的屬性,他會自動的收集依賴, 隻要我們回調中引用到瞭 響應式的屬性, 那麼當這些屬性變更的時候,這個回調都會執行,而 watchEffect 隻能監聽指定的屬性而做出變更
- 使用需引入
import { watchEffect } from 'vue'
setup() { const p1 = ref(0) const p2 = ref(1) const p3 = reactive({ name:'林一', age:50, product:{ wx:14 } }) const S = watchEffect(()=>{ const a = p1.value const b = p2.value console.log('進入頁面我就執行') }) S()//停止監聽 return {p1,p2,p3} },
9.watch偵聽器
- 與vue2一致,均是用來偵聽數據變化的
- 使用需引入
import { watch } from 'vue'
setup() { const p1 = ref(0) const p2 = ref(1) const p3 = reactive({ name:'林一', age:50, product:{ wx:14 } }) // 一:偵聽ref的基本數據 // watch(p1,(newVal,oldVal)=>{ // console.log(newVal,oldVal) // },{immediate:true})//{immediate:true}立即偵聽 // 二:偵聽多個ref響應數據 // watch([p1,p2],(newVal,oldVal)=>{ // console.log(newVal,oldVal) // }) // 三:偵聽整個reactive定義的數據:隻能監聽到最新的結果,之前的結果監聽不到 // watch(p3,(newVal,oldVal)=>{ // console.log(newVal,oldVal) // }) // 四:偵聽reactive定義的數據中的某一個值:可以監聽到,無論層級有多深 watch(()=>p3.product.wx,(newVal,oldVal)=>{ console.log(newVal,oldVal) }) return {p1,p2,p3} },
10.computed
- 與vue2一致,均是用來監聽數據變化
- 使用需引入
import { computed } from 'vue'
setup() { const mayun = '' const huateng = '' const res = reactive({linyi,liner}) // 計算年齡總和 const sum = computed({ get(){ return res.linyi + res.liner }, set(val){ console.log(val) } }) return {...toRefs(res),sum} }
11.reactive介紹
- reactive同樣為我們的值創建瞭一個響應式引用
- 定義基本普通類型數據不能用reactive,用ref
- reactive主要定義復雜數據類型,比如數組,對象
- reactive可響應深層次的數據,比如多維數組
- reactive返回一個響應式的proxy對象
- 使用需引入
import { reactive } from 'vue' reactive({name:'林一'})
setup(){ // const name = reactive({name:'林一'}) // const age = reactive({age:20}) // const company = reactive({company:'阿裡巴巴'}) // // 深層次響應式 // const pro = reactive({ // a:'淘寶', // b:'天貓', // c:{ // d:'京東', // e:'順豐' // } // }) const btn = ()=>{ // name.name = '林二' // age.age = 40 // pro.c.d = '京東0000' res.name = '林三' } // 共用一個reactive const name = '林四' const age = 52 const company = '阿裡巴巴' const res = reactive({name,age,company}) return {res,btn} }
12.toRefs介紹
- 用於批量設置多個數據為響應式數據
- toRefs與原始數據有交互,修改響應式數據會影響到原數據,但是不會更新視圖層
- toRefs還可以與其他響應式函數交互,更加方便處理視圖層數據
- 使用需引入
import {toRefs} from 'vue' toRefs(obj)
setup(){ const obj = {name:'林一',age:40} const refs = reactive(obj) // const res = toRefs(refs) const btn = ()=>{ // res.name.value = '林三' // console.log(res) console.log(refs) refs.name = '林二' console.log(refs) console.log(obj) } return {...toRefs(refs),btn} }
到此這篇關於vue3.0組合式api的使用小結的文章就介紹到這瞭,更多相關vue3組合式api使用內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- vue3常用的API使用簡介
- Vue3.0中Ref與Reactive的區別示例詳析
- vue3中watch和watchEffect實戰梳理
- Vue3中的ref和reactive響應式原理解析
- Vue中ref、reactive、toRef、toRefs、$refs的基本用法總結