成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

訴諸 Vue 組合式 API 解構 Props

開發 前端
讀寫 props? 對象時,我們要做的第一件事可能是,解構 props? 對象,然后讀寫各個屬性。但當我學習 Vue 組合式 API 時,令我大吃一驚的是,解構的 props 丟失了響應性!

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

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

在本文中,我們將學習如何正確解構 Vue 組件的 props,使得 props 不會丟失響應性。

1. 解構 props

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

圖片圖片

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

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

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

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

圖片圖片

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

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

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

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

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

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

圖片圖片

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

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

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

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

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

其工作機制如下:

圖片圖片

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

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

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

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

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

4. 總結一下

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

解決響應性丟失的方案主要有兩種:

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

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

責任編輯:武曉燕 來源: 人貓神話
相關推薦

2022-06-13 08:39:21

Vue3API

2024-06-20 13:50:53

Vue 3API開發

2025-03-14 08:01:19

2023-04-19 08:12:00

VueAPI組合式

2022-03-24 15:28:43

Vue開發框架

2022-03-11 12:31:04

Vue3組件前端

2020-07-10 11:30:29

組合式架構傳統存儲存儲

2015-01-28 09:59:00

IBM混合云

2025-03-26 10:29:22

Vue3前端API

2017-11-02 08:44:50

組合式存儲架構

2024-06-25 12:20:31

2025-02-25 08:51:19

2022-02-22 07:37:26

VuePinia態管理庫

2022-06-21 12:09:18

Vue差異

2021-12-15 08:23:42

Vue3 插件Vue應用

2025-01-20 00:00:06

Vue開發工具庫

2021-12-01 08:11:44

Vue3 插件Vue應用

2020-12-01 08:34:31

Vue3組件實踐

2021-12-02 05:50:35

Vue3 插件Vue應用

2024-12-05 10:53:02

JSON數據服務器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久图文区 | 欧美一级黄色片免费观看 | 成人久久久久久久久 | 亚洲精品久久久久久宅男 | 日本免费黄色一级片 | av一区二区三区四区 | 伊人精品一区二区三区 | 久久精品中文 | 涩涩视频网 | 天久久 | 久久久久国产精品一区二区 | 亚洲成人精品久久 | 天天艹天天干天天 | 国产成人精品999在线观看 | 91久久精品一区二区二区 | 成人激情免费视频 | 欧洲精品久久久久毛片完整版 | 欧美精品在线一区二区三区 | 欧美综合国产精品久久丁香 | 日韩在线视频一区 | 日韩在线播放第一页 | 欧美视频精品 | 亚洲精品国产电影 | 免费h在线 | 日韩欧美在 | 影音先锋亚洲资源 | 精品毛片| 久久狠狠 | 91天堂网 | 精品国产鲁一鲁一区二区张丽 | 日韩欧美中文字幕在线观看 | 成人午夜免费网站 | 韩国主播午夜大尺度福利 | 精品国产一区探花在线观看 | 欧美三区在线观看 | 国产精品久久久久久久久久 | 成人影视网址 | 伊人久久免费视频 | 你懂的在线视频播放 | 伊人久久综合影院 | 欧美精品在线免费观看 |