欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue3中Composition的API用法詳解

 更新時間:2023年06月16日 08:45:48   作者:會說法語的豬  
這篇文章主要為大家詳細(xì)介紹了Vue3中Composition的一些常見API的用法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、 Reactive判斷的API 

1. isProxy

檢查對象是否由reactive或者readonly創(chuàng)建的proxy ,返回一個布爾值

<script setup>
import { reactive, readonly, isProxy } from 'vue'
let foo = readonly({ name: 'WFT1' }) // 其中的屬性不可修改
let bar = reactive({ name: 'WFT2' })
console.log(isProxy(foo)) // true
console.log(isProxy(bar)) // true
</script>

2. isReactive

檢查對象是否是由reactive創(chuàng)建的響應(yīng)式代理 

如果該代理是readonly創(chuàng)建的,但包裹了由reactive船艦的另一個代理,它也會返回為true 

<script setup>
import { reactive, readonly, isReactive } from 'vue'
let foo = reactive({ name: 'WFT2' })
let bar = readonly(reactive({ name: 'WFT1' }))
let info = readonly({ age: 18 })
console.log(isReactive(foo)) // true
console.log(isReactive(bar)) // true
console.log(isReactive(info)) // false
</script>

3.  isReadonly

檢查對象是否是由readonly創(chuàng)建的只讀代理 

<script setup>
import { readonly, isReadonly } from 'vue'
let foo = readonly({ name: 'WFT1' })
console.log(isReadonly(foo)) // true
</script>

4. toRaw

返回 reactive 或 readonly代理的原始對象(不建議保留對原始對象的持久引用,請謹(jǐn)慎使用) 

<script setup>
import { reactive, readonly, toRaw } from 'vue'
let obj1 = { name: 'WFT1' }
let obj2 = { name: 'WFT2' }
let foo = reactive(obj1)
let bar = readonly(obj2)
let myObj1 = toRaw(foo)
let myObj2 = toRaw(bar)
console.log(myObj1 === obj1) // true
console.log(myObj2 === obj2) // true
</script>

5. shallowReactive

創(chuàng)建一個響應(yīng)式代理,它跟蹤其自身property的響應(yīng)性,但不執(zhí)行嵌套對象的深層響應(yīng)式轉(zhuǎn)換(深層還是原生對象) 

<template>
  <div class="main">
    <h3>{{ obj.info.name }}</h3>
    <button @click="edit">深層修改</button>
  </div>
</template>
<script setup>
import { shallowReactive } from 'vue'
let obj = shallowReactive({
  info: {
    name: 'WFT'
  }
})
const edit = () => {
  obj.info.name = '哈哈哈'
  console.log(obj)
}
</script>

上面代碼,當(dāng)點擊深層修改按鈕時 頁面并沒有改變,但是控制臺打印的obj其中的info.name已經(jīng)修改。如果換成reactive包裹就會發(fā)生改變 

6. shallowReadonly

創(chuàng)建一個proxy,使其自身的property為只讀,但不執(zhí)行嵌套對象的深度只讀轉(zhuǎn)換(深層還是可讀、可寫的) 

<script setup>
import { readonly } from 'vue'
let obj = readonly({
  info: {
    name: 'WFT'
  }
})
const edit = () => {
  obj.info.name = '哈哈哈'
}
</script>

看這段兒代碼,我們?nèi)バ薷钠渲袑傩栽诳刂婆_會給出警告,為一個只讀屬性,不可修改

但是將readonly換成 shallowReadonly 就可以修改了,當(dāng)然淺層是不能修改的,深層還是可以修改

<script setup>
import { shallowReadonly } from 'vue'
let obj = shallowReadonly({
  info: {
    name: 'WFT'
  }
})
const edit = () => {
  obj.info.name = '哈哈哈'
}
</script>

二、Ref相關(guān)的API 

1.isRef 

檢查對象是否是由ref創(chuàng)建的響應(yīng)式代理 

<script setup>
import { ref, isRef } from 'vue'
const name = ref('WFT')
console.log(isRef(name)) // true
</script>

2. toRefs 

這個就是,當(dāng)我們使用了reactive定義了響應(yīng)式對象的時候,我們想通過es6語法解構(gòu)出來使用的華,這時候的解構(gòu)出來的就不是響應(yīng)式數(shù)據(jù)。如果想解構(gòu)出來的也是響應(yīng)式數(shù)據(jù),就要使用toRefs了,使用toRefs包裹之后,再解構(gòu)出來,里面的每個屬性都相當(dāng)于通過ref包裹了一層的

<template>
  <div class="main">
    <h3>{{ info.age }}</h3>
    <h3>{{ age }}</h3>
    <button @click="edit">修改age</button>
  </div>
</template>
<script setup>
import { reactive, toRefs } from 'vue'
let info = reactive({ age: 18 })
let { age } = toRefs(info)
const edit = () => {
  age.value++
}
</script>

就像上面的代碼示例 

3. toRef

這個和toRefs有著一樣的功能,只不過這個是將里面的某一個屬性轉(zhuǎn)為響應(yīng)式,該方法接受兩個參數(shù),第一個參數(shù)就是目標(biāo)reactive對象,第二個就是我們要操作的屬性 

<template>
  <div class="main">
    <h3>{{ info.age }}</h3>
    <h3>{{ age }}</h3>
    <button @click="edit">修改age</button>
  </div>
</template>
<script setup>
import { reactive, toRef } from 'vue'
let info = reactive({ name: 'wft', age: 18 })
let age = toRef(info, 'age')
const edit = () => {
  age.value++
}
</script>
<script setup>
import { reactive, toRef } from 'vue'
const state = reactive({ name: 'wft', age: 18 })
// 如果我們只希望轉(zhuǎn)換一個reactive對象中的屬性為ref響應(yīng)式變量,那么可以使用toRef方法
const name = toRef(state, 'name')
const { age } = state // 這個age不是響應(yīng)式數(shù)據(jù)
const changeName = () => state.name = 'WFT'
</script>

4. unref

如果我們想要獲取一個ref引用中的value,那么也可以通過unref

如果參數(shù)是一個ref,則返回內(nèi)部值,否則返回參數(shù)本身;

這是 val = isRef(val) ? val.value : val 的語法糖函數(shù)

<script setup>
import { ref, unref } from 'vue'
const name = ref('WFT')
test(name)
test('這個名字不是由ref方法包裹的')
function test(name) {
  console.log(unref(name))
}
</script>

5. shallowRef

創(chuàng)建一個淺層的ref對象 和 shallowReactive類似

<template>
  <div class="main">
    <h3>{{ obj.info.age }}</h3>
    <button @click="editAge">修改age</button>
  </div>
</template>
<script setup>
import { shallowRef } from 'vue'
const obj = shallowRef({ info: { name: 'wft', age: 18 } })
const editAge = () => {
  obj.value.info.age++
  console.log(obj.value.info.age) // 19  但是頁面沒有更新
}
</script>

6. triggerRef

手動觸發(fā)和shallowRef相關(guān)聯(lián)的副作用 

還是上面的代碼,我們使用shallowRef包裹的淺層ref對象,修改深層變量的時候頁面不會進(jìn)行更新,這時候我們手動調(diào)用triggerRef就可以強制更新 

<template>
  <div class="main">
    <h3>{{ obj.info.age }}</h3>
    <button @click="editAge">修改age</button>
  </div>
</template>
<script setup>
import { shallowRef, triggerRef } from 'vue'
const obj = shallowRef({ info: { name: 'wft', age: 18 } })
const editAge = () => {
  obj.value.info.age++
  triggerRef(obj)
}
</script>

7. customRef (使用極少)

創(chuàng)建一個自定義的ref,并對其依賴項跟蹤和更新觸發(fā)進(jìn)行顯示控制

它需要一個工廠函數(shù) ,該函數(shù)接受 track 和 trigger函數(shù)作為參數(shù);

并且應(yīng)該返回一個帶有g(shù)et 和 set的對象 

其實上面真正使用到的時候就不多,這個的使用就更少了,所以我也沒有很深入去研究這個api,所以這個不做案例代碼了,知道有這個東西就好了,大家感興趣可以自己去百度找一些案例看看,一般做第三方庫的時候可能會使用這個api 

以上就是Vue3中Composition的API用法詳解的詳細(xì)內(nèi)容,更多關(guān)于Vue3 Composition API的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • v-for中動態(tài)校驗el-form表單項的實踐

    v-for中動態(tài)校驗el-form表單項的實踐

    在項目開發(fā)中,我們經(jīng)常會遇到表單保存的功能,本文主要介紹了v-for中動態(tài)校驗el-form表單項的實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-05-05
  • vue+elementUI實現(xiàn)動態(tài)合并數(shù)據(jù)相同的單元格(可指定合并列)

    vue+elementUI實現(xiàn)動態(tài)合并數(shù)據(jù)相同的單元格(可指定合并列)

    這篇文章主要介紹了vue+elementUI如何實現(xiàn)動態(tài)合并數(shù)據(jù)相同的單元格,文中有詳細(xì)的代碼實例供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2023-07-07
  • Vue組件之間四種通信方式詳解

    Vue組件之間四種通信方式詳解

    vue框架提供了前端開發(fā)組件的思想,可以通過組件來組合成一個完整的頁面,都是隨著組件數(shù)量原來越多,組件之間難免需要相互通信。本文將為大家介紹四種組件間的通信方式,需要的可以參考一下
    2022-01-01
  • Vue組件開發(fā)技巧總結(jié)

    Vue組件開發(fā)技巧總結(jié)

    這篇文章通過代碼示例給大家詳細(xì)分析了Vue組件開發(fā)的相關(guān)技巧以及知識點,對此有需要的讀者們參考下吧。
    2018-03-03
  • Vue2.x響應(yīng)式簡單講解及示例

    Vue2.x響應(yīng)式簡單講解及示例

    這篇文章主要介紹了Vue2.x響應(yīng)式及簡單的示例,應(yīng)用了簡單的源代碼進(jìn)行講解,感興趣的小伙伴可以參考一下,希望可以幫助到你
    2021-08-08
  • vue 實現(xiàn)網(wǎng)頁截圖功能詳解

    vue 實現(xiàn)網(wǎng)頁截圖功能詳解

    這篇文章主要介紹了通過vue實現(xiàn)網(wǎng)頁截圖的功能,有興趣的童鞋可以了解一下
    2021-11-11
  • 快速解決Error: error:0308010C:digital envelope routines::unsupported的三種解決方案

    快速解決Error: error:0308010C:digital envelope ro

    因為 node.js V17版本中最近發(fā)布的OpenSSL3.0, 而OpenSSL3.0對允許算法和密鑰大小增加了嚴(yán)格的限制,下面通過本文給大家分享快速解決Error: error:0308010C:digital envelope routines::unsupported的三種解決方案,感興趣的朋友一起看看吧
    2024-02-02
  • 解析vue、angular深度作用選擇器

    解析vue、angular深度作用選擇器

    在 Vue 的開發(fā)中,我們經(jīng)常會用到外部組件庫,這篇文章主要介紹了vue、angular深度作用選擇器,需要的朋友可以參考下
    2019-09-09
  • Vue?動畫效果、過渡效果的示例代碼

    Vue?動畫效果、過渡效果的示例代碼

    這篇文章主要介紹了Vue?動畫效果、過渡效果,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 讓你一看就明白的$nextTick講解

    讓你一看就明白的$nextTick講解

    在我們用vue時,我們經(jīng)常用到一個方法是this.$nextTick,相信你也用過,我常用的場景是在進(jìn)行獲取數(shù)據(jù)后,需要對新視圖進(jìn)行下一步操作或者其他操作時,發(fā)現(xiàn)獲取不到dom,這篇文章主要給大家介紹了關(guān)于$nextTick的相關(guān)資料,需要的朋友可以參考下
    2021-07-07

最新評論