偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

訴諸 Vue 組合式 API 解構(gòu) Props

開發(fā) 前端
讀寫 props? 對(duì)象時(shí),我們要做的第一件事可能是,解構(gòu) props? 對(duì)象,然后讀寫各個(gè)屬性。但當(dāng)我學(xué)習(xí) Vue 組合式 API 時(shí),令我大吃一驚的是,解構(gòu)的 props 丟失了響應(yīng)性!

大家好,這里是大家的林語冰。

響應(yīng)式 API 賦予了組合式 API 一大坨可能性的同時(shí),代碼精簡。雖然但是,我們應(yīng)該意識(shí)到響應(yīng)性的某些陷阱,比如丟失響應(yīng)性。

在本文中,我們將學(xué)習(xí)如何正確解構(gòu) Vue 組件的 props,使得 props 不會(huì)丟失響應(yīng)性。

1. 解構(gòu) props

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

圖片圖片

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

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

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

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

圖片圖片

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

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

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

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

2. 解決方案 1:使用“props”對(duì)象

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

圖片圖片

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

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

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

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

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

其工作機(jī)制如下:

圖片圖片

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

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

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

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

否則,我會(huì)堅(jiān)持之前的方案,直接使用 props 對(duì)象讀寫 prop。

4. 總結(jié)一下

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

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

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

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

責(zé)任編輯:武曉燕 來源: 人貓神話
相關(guān)推薦

2022-06-13 08:39:21

Vue3API

2024-06-20 13:50:53

Vue 3API開發(fā)

2025-03-14 08:01:19

2023-04-19 08:12:00

VueAPI組合式

2022-03-24 15:28:43

Vue開發(fā)框架

2022-03-11 12:31:04

Vue3組件前端

2020-07-10 11:30:29

組合式架構(gòu)傳統(tǒng)存儲(chǔ)存儲(chǔ)

2015-01-28 09:59:00

IBM混合云

2025-03-26 10:29:22

Vue3前端API

2017-11-02 08:44:50

組合式存儲(chǔ)架構(gòu)

2024-06-25 12:20:31

2025-02-25 08:51:19

2022-02-22 07:37:26

VuePinia態(tài)管理庫

2022-06-21 12:09:18

Vue差異

2021-12-15 08:23:42

Vue3 插件Vue應(yīng)用

2021-12-01 08:11:44

Vue3 插件Vue應(yīng)用

2025-01-20 00:00:06

Vue開發(fā)工具庫

2020-12-01 08:34:31

Vue3組件實(shí)踐

2025-07-29 04:00:00

Vue3 庫源碼工具集

2021-12-02 05:50:35

Vue3 插件Vue應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)