国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue3-響應(yīng)式基礎(chǔ)之reactive

這篇具有很好參考價值的文章主要介紹了vue3-響應(yīng)式基礎(chǔ)之reactive。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

reactive()

還有另一種聲明響應(yīng)式狀態(tài)的方式,即使用 reactive() API。與將內(nèi)部值包裝在特殊對象中的 ref 不同,reactive() 將使對象本身具有響應(yīng)性:

  • 「點(diǎn)擊按鈕+1」

<script?lang="ts"?setup>
import?{?reactive?}?from?'vue'

const?state?=?reactive({?count:?0?})

</script>

<template>
????<div?class="container">
????????<button?@click="state.count++">
????????????點(diǎn)擊次數(shù)加+1?:?{{?state.count?}}
????????</button>
????</div>
</template>

<style?lang="scss"?scoped>
.container?{}
</style>
  • 「示例效果」

    vue3-響應(yīng)式基礎(chǔ)之reactive,vue3,vue.js,前端,typescript,javascript

響應(yīng)式對象是 JavaScript 代理,其行為就和普通對象一樣。不同的是,Vue 能夠攔截對響應(yīng)式對象所有屬性的訪問和修改,以便進(jìn)行依賴追蹤和觸發(fā)更新。

reactive() 將深層地轉(zhuǎn)換對象:當(dāng)訪問嵌套對象時,它們也會被 reactive() 包裝。當(dāng) ref 的值是一個對象時,ref() 也會在內(nèi)部調(diào)用它。與淺層 ref 類似,這里也有一個 shallowReactive() API 可以選擇退出深層響應(yīng)性。

  • reactive() 返回的是一個原始對象的 Proxy,它和原始對象是不相等的

const?raw?=?{}
const?proxy?=?reactive(raw)

//?代理對象和原始對象不是全等的
console.log(proxy?===?raw)?//?false

只有代理對象是響應(yīng)式的,更改原始對象不會觸發(fā)更新。

因此,使用 Vue 的響應(yīng)式系統(tǒng)的最佳實(shí)踐是 「僅使用你聲明對象的代理版本」。

  • 為保證訪問代理的一致性,對同一個原始對象調(diào)用 reactive() 會總是返回同樣的代理對象,而對一個已存在的代理對象調(diào)用 reactive() 會返回其本身:

//?在同一個對象上調(diào)用?reactive()?會返回相同的代理
console.log(reactive(raw)?===?proxy)?//?true

//?在一個代理上調(diào)用?reactive()?會返回它自己
console.log(reactive(proxy)?===?proxy)?//?true

這個規(guī)則對嵌套對象也適用。依靠深層響應(yīng)性,響應(yīng)式對象內(nèi)的嵌套對象依然是代理:

const?proxy?=?reactive({})

const?raw?=?{}
proxy.nested?=?raw

console.log(proxy.nested?===?raw)?//?false

reactive() 的局限性

  1. 有限的值類型:它只能用于對象類型 (對象、數(shù)組和如 Map、Set 這樣的集合類型)。它不能持有如 string、number 或 boolean 這樣的原始類型。

  2. 不能替換整個對象:由于 Vue 的響應(yīng)式跟蹤是通過屬性訪問實(shí)現(xiàn)的,因此我們必須始終保持對響應(yīng)式對象的相同引用。這意味著我們不能輕易地“替換”響應(yīng)式對象,因?yàn)檫@樣的話與第一個引用的響應(yīng)性連接將丟失:

let?state?=?reactive({?count:?0?})

//?上面的?({?count:?0?})?引用將不再被追蹤
//?(響應(yīng)性連接已丟失!)
state?=?reactive({?count:?1?})
  1. 對解構(gòu)操作不友好:當(dāng)我們將響應(yīng)式對象的原始類型屬性解構(gòu)為本地變量時,或者將該屬性傳遞給函數(shù)時,我們將丟失響應(yīng)性連接:

const?state?=?reactive({?count:?0?})

//?當(dāng)解構(gòu)時,count?已經(jīng)與?state.count?斷開連接
let?{?count?}?=?state
//?不會影響原始的?state
count++

//?該函數(shù)接收到的是一個普通的數(shù)字
//?并且無法追蹤?state.count?的變化
//?我們必須傳入整個對象以保持響應(yīng)性
callSomeFunction(state.count)

由于這些限制,我們建議使用 ref() 作為聲明響應(yīng)式狀態(tài)的主要 API。

額外的 ref 解包細(xì)節(jié)

  1. 作為 reactive 對象的屬性 一個 ref 會在作為響應(yīng)式對象的屬性被訪問或修改時自動解包。換句話說,它的行為就像一個普通的屬性:

const?count?=?ref(0)
const?state?=?reactive({
??count
})

console.log(state.count)?//?0

state.count?=?1
console.log(count.value)?//?1
  1. 如果將一個新的 ref 賦值給一個關(guān)聯(lián)了已有 ref 的屬性,那么它會替換掉舊的 ref:

const?otherCount?=?ref(2)

state.count?=?otherCount
console.log(state.count)?//?2
//?原始?ref?現(xiàn)在已經(jīng)和?state.count?失去聯(lián)系
console.log(count.value)?//?1

只有當(dāng)嵌套在一個深層響應(yīng)式對象內(nèi)時,才會發(fā)生 ref 解包。當(dāng)其作為淺層響應(yīng)式對象的屬性被訪問時不會解包。

數(shù)組和集合的注意事項(xiàng)

與 reactive 對象不同的是,當(dāng) ref 作為響應(yīng)式數(shù)組或原生集合類型(如 Map) 中的元素被訪問時,它不會被解包:

const?books?=?reactive([ref('Vue?3?Guide')])
//?這里需要?.value
console.log(books[0].value)

const?map?=?reactive(new?Map([['count',?ref(0)]]))
//?這里需要?.value?訪問
console.log(map.get('count').value)//輸出0

new?Map([['count',?ref(0)]]?這個理解起來就是
訪問?key為count的對應(yīng)value值?
也就是一組鍵值對的結(jié)構(gòu),具有極快的查找速度。

ref自動解包就是無需加上.value訪問,比如在模版中使用會自動解包{{msg}}

不會自動解包 就是需要再后面加上一個.value才能訪問到值

Map是ES6規(guī)范引入新的數(shù)據(jù)類型。文章來源地址http://www.zghlxwxcb.cn/news/detail-794119.html

到了這里,關(guān)于vue3-響應(yīng)式基礎(chǔ)之reactive的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前端Vue篇之Vue3響應(yīng)式:Ref和Reactive

    在Vue3中,響應(yīng)式編程是非常重要的概念,其中 Ref 和 Reactive 是兩個關(guān)鍵的API。 Ref : Ref 用于創(chuàng)建一個響應(yīng)式的基本數(shù)據(jù)類型,比如數(shù)字、字符串等。它將普通的數(shù)據(jù)變成響應(yīng)式數(shù)據(jù),可以監(jiān)聽數(shù)據(jù)的變化。使用 Ref 時,我們可以通過 .value 來訪問和修改數(shù)據(jù)的值。 Reactive :

    2024年04月25日
    瀏覽(25)
  • vue3 reactive包裹數(shù)組無法頁面無法響應(yīng)式

    原代碼如下: 此時removeItem方法運(yùn)行,打印出historyAccount的值確實(shí)被改變了,但是頁面還是沒有變化 原因: 如果你直接通過賦值的方式改變 reactive 對象引用的數(shù)組,是不會觸發(fā)視圖的更新的,應(yīng)該使用 Vue 提供的響應(yīng)式方法來更新響應(yīng)式數(shù)據(jù)。 ?改進(jìn):可以利用splice方法刪除

    2024年04月09日
    瀏覽(32)
  • 【Vue3】使用ref與reactive創(chuàng)建響應(yīng)式對象

    【Vue3】使用ref與reactive創(chuàng)建響應(yīng)式對象

    ??????歡迎來到我的博客,你將找到有關(guān)如何使用技術(shù)解決問題的文章,也會找到某個技術(shù)的學(xué)習(xí)路線。無論你是何種職業(yè),我都希望我的博客對你有所幫助。最后不要忘記訂閱我的博客以獲取最新文章,也歡迎在文章下方留下你的評論和反饋。我期待著與你分享知識、互

    2024年02月21日
    瀏覽(23)
  • vue3 ref reactive響應(yīng)式數(shù)據(jù) 賦值的問題

    vue3 ref reactive響應(yīng)式數(shù)據(jù) 賦值的問題

    doing 遇見就記錄,最后更新時間23.8.30 錯誤示范:直接賦值 以數(shù)組為例,對象也是一樣的操作。 ref 定義的屬性等價于 reactive({value:xxx}) ,所以 reactive、ref 直接重新賦值丟失響應(yīng)是因?yàn)橐玫刂纷兞?正確寫法 方法1: ref.value ,代碼中更為清晰地表明響應(yīng)式數(shù)據(jù) 方法2:包一層

    2024年02月10日
    瀏覽(27)
  • Vue3通透教程【五】Vue3中的響應(yīng)式數(shù)據(jù) reactive函數(shù)、ref函數(shù)

    專欄介紹: 涼哥作為 Vue 的忠實(shí)粉絲輸出過大量的 Vue 文章,應(yīng)粉絲要求開始更新 Vue3 的相關(guān)技術(shù)文章,Vue 框架目前的地位大家應(yīng)該都曉得,所謂三大框架使用人數(shù)最多,公司選型最多的框架,涼哥之前在文章中也提到過就是 Vue 框架之所以火起來的原因,和 Vue 框架相比其他

    2024年01月24日
    瀏覽(27)
  • 避大坑!Vue3中reactive丟失響應(yīng)式的問題

    在vue3中,我們定義響應(yīng)式數(shù)據(jù)無非是ref和reactive。 但是有的小伙伴會踩雷!導(dǎo)致定義的響應(yīng)式丟失的問題。 大錯特錯?。?! 大錯特錯?。?! 1.ref 定義數(shù)據(jù)(包括對象)時,都會變成 RefImpl(Ref 引用對象) 類的實(shí)例,無論是修改還是重新賦值都會調(diào)用 setter,都會經(jīng)過 reactive 方法

    2023年04月16日
    瀏覽(28)
  • Vue3-04-reactive() 響應(yīng)式失效的三種情況

    Vue3-04-reactive() 響應(yīng)式失效的三種情況

    屬性作為參數(shù)案例 整個對象作為參數(shù)

    2024年02月05日
    瀏覽(28)
  • Vue3中的Ref與Reactive:深入理解響應(yīng)式編程

    Vue 3是一個功能強(qiáng)大的前端框架,它引入了一些令人興奮的新特性,其中最引人注目的是 ref 和 reactive 。這兩個API是Vue 3中響應(yīng)式編程的核心,本文將深入探討它們的用法和差異。 在Vue中,響應(yīng)式編程是一種使數(shù)據(jù)與UI保持同步的方式。當(dāng)數(shù)據(jù)變化時,UI會自動更新,反之亦然

    2024年02月08日
    瀏覽(31)
  • 【Vue3】Vue3中reactive變量重新賦值無法響應(yīng)的三種處理方法(已解決)

    【Vue3】Vue3中reactive變量重新賦值無法響應(yīng)的三種處理方法(已解決)

    1、html 2、定義reactive變量 3、重新賦值 ? 1、html 2、定義ref變量 3、賦值 第三種方案:push(不推薦)

    2024年02月15日
    瀏覽(29)
  • 關(guān)于 Vue3 響應(yīng)式 API 以及 reactive 和 ref 的用法

    關(guān)于 Vue3 響應(yīng)式 API 以及 reactive 和 ref 的用法

    這篇文章記錄一下 Vue3 響應(yīng)式的內(nèi)容,其中還包括了 reactive 和 ref 的用法。響應(yīng)式是一種允許以聲明式的方式去適應(yīng)變化的編程范例,接下來我們一起看看。 Vue 框架的特點(diǎn)之一就是響應(yīng)式。 Vue 2.x 是基于 Object.defineProperty() 方法實(shí)現(xiàn)響應(yīng)式。但是 Object.defineProperty() 方法有一定

    2024年02月12日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包