亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue組合式API如何正確解構(gòu)props不會丟失響應(yīng)性

 更新時間:2024年01月15日 10:28:05   作者:人貓神話?大家的林語冰  
響應(yīng)式?API?賦予了組合式?API?一大坨可能性的同時,代碼精簡,雖然但是,我們應(yīng)該意識到響應(yīng)性的某些陷阱,比如丟失響應(yīng)性,在本文中,我們將學習如何正確解構(gòu)?Vue?組件的?props,使得?props?不會丟失響應(yīng)性

解構(gòu) props

編譯器宏 defineProps() 可以輔助讀寫提供給 <script setup> 中的組件的 props

上述示例中,props 是一個響應(yīng)式對象,包含了提供給組件的 props。如果組件 props 變化了,props 響應(yīng)式對象也會隨之變化。

讀寫 props 對象時,我們要做的第一件事可能是,解構(gòu) props 對象,然后讀寫各個屬性。但當我學習 Vue 組合式 API 時,令我大吃一驚的是,解構(gòu)的 props 丟失了響應(yīng)性!

讓我們來看一個例子。下述組件 <EvenOdd :count="5"> 接受 count 屬性作為數(shù)字,并顯示一條消息,無論 count 是偶數(shù)還是奇數(shù)。

在解構(gòu) props 對象 const { count } = defineProps() 之后,訪問該 count 屬性:

單擊幾次增加按鈕。您會注意到,盡管 count 屬性不斷累加,但 "The number is even" 消息始終保持不變。

當解構(gòu) props 對象 const { count } = defineProps() 時,響應(yīng)性就會丟失。

響應(yīng)性之所以會丟失,是因為在解構(gòu)時 count 變異為具有原始值的變量(一個平平無奇的數(shù)字罷了)。但 Vue 的響應(yīng)性不能直接作用于原始值:Vue 必須訴諸 ref 或響應(yīng)式對象。

粉絲請注意,在 Vue 中將原始值直接賦值給變量時要小心:此乃丟失響應(yīng)性的前提。

解決方案 1:使用“props”對象

第一個顯而易見的解決方案是,不要解構(gòu) props 對象,并使用屬性讀寫器直接讀寫 props: props.count。

上述示例中,讀寫 computed() 內(nèi)的 props.count 可以在 props.count 變更時保留響應(yīng)性。props 對象是響應(yīng)式的,對其進行任何變更都會被正確追蹤。

這種方案的短板是,我們必須始終使用屬性讀寫器(比如 props.count)來讀寫 <script setup 中的 prop

解決方案 2:使用 toRefs() 輔助函數(shù)

如果您閱讀至此,我敢打賭您是解構(gòu)賦值的忠實粉絲,并且沒有它就活不下去。

問題不大,那么您可以有意識地將 props 對象的每個屬性轉(zhuǎn)換為 ref,來保留解構(gòu) props 的響應(yīng)性。Vue 提供了一個特殊的輔助函數(shù) toRefs(reactiveObject) 來精準完成此操作。

其工作機制如下:

toRefs(props) 返回一個對象,其中每個屬性都是對相應(yīng) prop 的 ref。

現(xiàn)在解構(gòu) const { count } = toRefs(props) 是安全的,因為 count 是基于 count 屬性的 ref。現(xiàn)在,每次 count 屬性變更時,count 的 ref 都會響應(yīng)屬性更改。

將 count 作為 ref,在 computed() 內(nèi),我們必須使用 count.value 讀寫 prop 的值(因為 count.value 是我們讀寫 ref 的值的方式)。

我發(fā)現(xiàn)此方案可以方便地將 prop ref 作為參數(shù)傳遞給組合式函數(shù):比如 useMyComposable(count),并且不會丟失響應(yīng)性。

否則,我會堅持之前的方案,直接使用 props 對象讀寫 prop。

總結(jié)

粉絲請注意,通過應(yīng)用解構(gòu) const { propA, propB } = defineProps(),我們會丟失 props 的響應(yīng)性。

解決響應(yīng)性丟失的方案主要有兩種:

  • 不解構(gòu) props,而是訴諸屬性讀寫器直接讀寫 props:比如 props.xxx/props.cat。

  • 有意識地使用 props 作為 refs 的對象:const { propA, propB } = toRefs(props)。這保留了解構(gòu)后的響應(yīng)性。然后我們可以將屬性作為獨立 ref 讀寫,比如 propsA.value/propB.value 等。

免責聲明

本文屬于是語冰的直男翻譯了屬于是,略有刪改,僅供粉絲參考,英文原味版請傳送 How to Destructure Props in Vue (Composition API)

以上就是Vue組合式API如何正確解構(gòu)props不會丟失響應(yīng)性的詳細內(nèi)容,更多關(guān)于Vue組合式API解構(gòu)props的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue結(jié)合axios與后端進行ajax交互的方法

    vue結(jié)合axios與后端進行ajax交互的方法

    本篇文章主要介紹了vue結(jié)合axios與后端進行ajax交互的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Vue.js實現(xiàn)時間軸功能

    Vue.js實現(xiàn)時間軸功能

    這篇文章主要為大家詳細介紹了Vue.js實現(xiàn)時間軸功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • vue 實現(xiàn)通過手機發(fā)送短信驗證碼注冊功能

    vue 實現(xiàn)通過手機發(fā)送短信驗證碼注冊功能

    這篇文章主要介紹了vue 實現(xiàn)通過手機發(fā)送短信驗證碼注冊功能的相關(guān)資料,需要的朋友可以參考下
    2018-04-04
  • 詳解Vue3?中的計算屬性及偵聽器

    詳解Vue3?中的計算屬性及偵聽器

    這篇文章主要介紹了詳解Vue3?中的計算屬性及偵聽器,文章圍繞主題的相關(guān)資料展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以看下一下
    2022-08-08
  • Vue3使用Echarts導致tooltip失效問題及解決方法

    Vue3使用Echarts導致tooltip失效問題及解決方法

    Vue3 使用 proxy 對象代理,而 echarts 則使用了大量的全等(===), 對比失敗從而導致了bug,這篇文章主要介紹了Vue3使用Echarts導致tooltip失效問題及解決方法,需要的朋友可以參考下
    2023-08-08
  • 關(guān)于vue路由緩存清除在main.js中的設(shè)置

    關(guān)于vue路由緩存清除在main.js中的設(shè)置

    今天小編就為大家分享一篇關(guān)于vue路由緩存清除在main.js中的設(shè)置,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue-cli項目中img如何使用require動態(tài)獲取圖片

    vue-cli項目中img如何使用require動態(tài)獲取圖片

    這篇文章主要介紹了vue-cli項目中img如何使用require動態(tài)獲取圖片,具有很好的參考價值,希望對大家有所幫助。
    2022-09-09
  • Element-Plus Select組件實現(xiàn)滾動分頁加載功能

    Element-Plus Select組件實現(xiàn)滾動分頁加載功能

    Element-Plus的select組件并沒有自帶滾動分頁加載的功能,其雖然提供了自定義下拉菜單的底部的方式可以自定義上一頁及下一頁操作按鈕的方式進行分頁加載切換,這篇文章主要介紹了Element-Plus Select組件實現(xiàn)滾動分頁加載功能,需要的朋友可以參考下
    2024-03-03
  • vue項目中運用webpack動態(tài)配置打包多種環(huán)境域名的方法

    vue項目中運用webpack動態(tài)配置打包多種環(huán)境域名的方法

    本人分享一個vue項目里,根據(jù)命令行輸入不同的命令,打包出不同環(huán)境域名的方法。需要的朋友跟隨小編一起看看吧
    2019-06-06
  • 使用vue3實現(xiàn)element-plus的主題切換效果

    使用vue3實現(xiàn)element-plus的主題切換效果

    Vue3 Element Plus是一個基于Vue 3框架的UI組件庫,它是由Element UI團隊開發(fā)的升級版本,Element Plus延續(xù)了Element UI簡潔、高效的風格,并引入了一些新的設(shè)計語言和技術(shù),如響應(yīng)式API和更好的性能優(yōu)化,本文給大家介紹了如何使用vue3實現(xiàn)element-plus的主題切換效果
    2024-12-12

最新評論