ref存儲對象和reactive深度響應式遞歸地對對象的嵌套屬性進行響應式處理

ref 不會遞歸地對 對象數組 中的每個屬性或元素進行深度響應式處理。如果你需要遞歸處理嵌套屬性,reactive 是更適合的選擇。讓我通過具體的例子來展示這一點。

例子:ref 存儲對象和嵌套對象

1. 使用 ref 存儲嵌套對象:
import { createApp, ref } from 'vue';createApp({setup() {// 使用 ref 存儲對象,包含嵌套屬性const user = ref({name: 'Alice',profile: {age: 25,address: 'New York'}});// 修改嵌套屬性function updateUser() {user.value.profile.age = 26; // 修改嵌套對象的屬性}return {user, // 返回 user 對象給模板updateUser};}
}).mount('#app');
模板部分:
<div id="app"><p>Name: {{ user.value.name }}</p><p>Age: {{ user.value.profile.age }}</p><button @click="updateUser">Update Age</button>
</div>
問題:

在這個例子中,ref 用于存儲一個 對象,對象內有一個嵌套的 profile 對象。user.value.profile.age 是嵌套屬性,它應該是響應式的。但問題在于,ref 不會遞歸地對嵌套對象進行響應式處理user.value.profile 并不是深度響應式的,而是淺響應式的。

這意味著,當你修改 user.value.profile.age 時,Vue 不會自動更新視圖,因為 profile 對象沒有被 深度響應式化

解決方法:

如果我們希望 profile 對象的嵌套屬性(如 ageaddress)也能觸發視圖更新,我們需要通過 reactive 來深度響應式化這個對象。

2. 使用 reactive 存儲嵌套對象:
import { createApp, reactive } from 'vue';createApp({setup() {// 使用 reactive 創建深度響應式對象const user = reactive({name: 'Alice',profile: {age: 25,address: 'New York'}});// 修改嵌套屬性function updateUser() {user.profile.age = 26; // 修改嵌套對象的屬性}return {user, // 返回 user 對象給模板updateUser};}
}).mount('#app');
模板部分:
<div id="app"><p>Name: {{ user.name }}</p><p>Age: {{ user.profile.age }}</p><button @click="updateUser">Update Age</button>
</div>
解釋:
  • 在這個例子中,reactive 用來將 user 對象及其內部屬性(如 profile)深度響應式化。
  • 現在,修改 user.profile.age 時,profile 對象age 屬性 都是 深度響應式的,因此視圖會自動更新。

總結:

  • ref 存儲 對象數組 時,它只會 創建響應式引用不會遞歸地對對象的嵌套屬性進行響應式處理。你需要使用 .value 來訪問和修改對象的內容。如果對象有嵌套的屬性,ref 無法保證它們是響應式的,除非顯式地使用 reactive
  • reactive 會對 對象 及其所有 嵌套屬性 進行深度響應式處理,無需使用 .value,并且修改嵌套屬性時視圖會自動更新。

何時使用 refreactive

  • ref 適用于 基本數據類型(如 numberstring)以及 簡單的對象或數組,但你需要通過 .value 來訪問和修改數據。
  • reactive 適用于 復雜數據類型(如 對象數組),并且會自動遞歸地將對象的每個屬性都變成響應式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917845.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917845.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917845.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小鵬汽車前端面經

前端基礎與瀏覽器機制 (Front-End Fundamentals & Browser Mechanics) 這些問題涵蓋了Web工作的基本原理&#xff0c;包括網絡、渲染和瀏覽器特性。 1. 瀏覽器渲染與性能 (Browser Rendering & Performance) URL輸入發生什么&#xff1f;(What happens when you type a…

利用DeepSeek編寫go語言按行排序程序

聽說google出品的go語言也是系統開發中常用的&#xff0c;性能到底怎么樣&#xff0c;還是老辦法&#xff0c;讓DeepSeek寫個程序跑一下&#xff0c;基于以往的經驗&#xff0c;直接讓它同時編寫有緩沖和無緩沖版本。 package mainimport ("bufio""fmt"&qu…

《解構Angular組件變化檢測:從自動到手 動的效能突破》

為何有時數據更新后視圖卻無動于衷?為何看似簡單的操作會引發連鎖式的性能損耗?要解開這些疑問,需要穿透表層的API調用,深入到框架設計的底層邏輯中去。變化檢測的核心使命,是確保視圖層能夠準確反映數據層的當前狀態。這種"數據-視圖"的同步關系,是所有前端框…

書單 | AI編程+Python+Go三大核心領域書單

這份書單聚焦AI編程、Python開發、Go語言三大核心領域&#xff0c;精選6本本月 最具前瞻性的技術圖書&#xff0c;為你構建"工具鏈業務層系統層"的全棧能力。 1、人人皆可Vibe編程&#xff1a;玩轉氛圍編程 作者&#xff1a;池志煒,薛志榮 本書圍繞Vibe編程這一AI驅…

Kali Linux 2025.2基于MITRE ATTCK框架

從徹底革新的菜單結構到新增的13款尖端工具&#xff0c;再到首次支持智能手表Wi-Fi注入&#xff0c;Kali Linux 2025.2為紅隊、藍隊以及安全研究人員提供了更高效、更直觀的工具生態。菜單結構大變革&#xff1a;基于MITRE ATT&CK框架Kali Linux 2025.2最引人注目的變化之一…

javacc實現簡單SQL解析器

文章目錄前言本章節源碼需求1&#xff1a;實現一個最簡單的select sql要求實現jj文件編譯測試需求2&#xff1a;理解Token及其他屬性說明javajj文件需求3&#xff1a;實現解析得到SQL語法樹 & 精確點位資料獲取前言 博主介紹&#xff1a;?目前全網粉絲4W&#xff0c;csdn…

Odoo OWL前端框架全面學習指南 (后端開發者視角)

核心理念&#xff1a; 將您熟悉的Odoo后端MVCORM架構思想&#xff0c;完整映射到前端OWL組件化開發中&#xff0c;讓您在熟悉的概念體系下&#xff0c;快速掌握新的技術棧。第一部分&#xff1a;核心概念映射與環境搭建內容摘要&#xff1a; 本部分旨在建立后端與前端最核心的概…

Java開發工具包,jdk,idea,VMware,rocketmq,redis,CentOS7

Java開發工具包&#xff0c;jdk&#xff0c;idea&#xff0c;VMware&#xff0c;rocketmq&#xff0c;redis&#xff0c;CentOS7 下載地址 通過網盤分享的文件&#xff1a;Java開發環境工具包 鏈接: https://pan.baidu.com/s/1eJqvPx5DYqtmXgmEtOl8-A?pwdcj1f 提取碼: cj1f –…

macOS Python 安裝

目錄 一、確認系統環境 二、安裝 &#xff08;一&#xff09;下載安裝包 &#xff08;二&#xff09;安裝過程 三、配置環境變量 四、驗證安裝 一、確認系統環境 在安裝 Python 之前&#xff0c;我們先簡單了解一下自己的 MACOS 系統。可以點擊屏幕左上角的蘋果菜單&…

MySQL 全方位解析:從基礎到高可用架構

1. 介紹 (Introduction) 1.1. 什么是 MySQL&#xff1f; MySQL 是全球最受歡迎的開源關系型數據庫管理系統 (Relational Database Management System, RDBMS)。它由瑞典的 MySQL AB 公司開發&#xff0c;現隸屬于 Oracle 公司。MySQL 將數據存儲在不同的、預先定義好結構的表中…

力扣熱題100——滑動窗口

無重復字符的最長子串步驟 1&#xff1a;初始狀態 字符串 s “abcabcbb”&#xff0c;哈希表 charSet 初始為空&#xff0c;雙指針 left 0&#xff0c;right 0。 哈希表&#xff08;charSet&#xff09;&#xff1a; {} 字符串&#xff1a; a b c a b c b b 指…

SOD-YOLO:增強基于YOLO的無人機影像小目標檢測

摘要 https://www.arxiv.org/pdf/2507.12727 小目標檢測仍是目標檢測領域中的一個挑戰性問題。為應對這一挑戰&#xff0c;我們提出了一種基于YOLOv8的增強模型SOD-YOLO。該模型在頸部&#xff08;neck&#xff09;中集成了ASF&#xff08;注意力尺度序列融合&#xff09;機制以…

監督微調-指令微調-偏好微調

有監督微調 有監督微調是使用輸入及其標簽對的典型情況。例如&#xff0c;判斷郵件是垃圾郵件還是非垃圾郵件&#xff0c;判斷情感是積極還是消極。根據文檔的主要主題對其進行分類也是一種常見應用。模型會將輸入文本的相應表示&#xff08;隱藏狀態或嵌入向量&#xff09;作為…

樓宇自控系統對建筑碳中和目標的實現具重要價值

隨著全球氣候變化問題日益嚴峻&#xff0c;建筑行業作為碳排放的重要來源之一&#xff0c;其節能減排工作備受關注。樓宇自控系統&#xff08;Building Automation System&#xff0c;BAS&#xff09;作為智能建筑的核心組成部分&#xff0c;通過集成控制、監測和管理建筑內的各…

【YOLO學習筆記】YOLOv5詳解

一、數據增強 mosaic仿射變換與透視變換Mixup mosaic代碼位置仿射變換 與 透視變換?代碼片段位置 二、網絡結構 1. 網絡不同尺寸 nsmlx與網絡深寬度 yolov5 官方提供了5個目標檢測的網絡版本&#xff1a;yolov5n、yolov5s、yolov5m、yolov5l、yolov5x &#xff0c;早年是…

WebRTC前處理模塊技術詳解:音頻3A處理與視頻優化實踐

一、WebRTC前處理模塊概述 WebRTC&#xff08;Web Real-Time Communication&#xff09;作為實時音視頻通信的核心技術&#xff0c;其前處理模塊是提升媒體質量的關鍵環節。該模塊位于媒體采集與編碼之間&#xff0c;通過對原始音頻/視頻數據進行優化處理&#xff0c;解決實時…

ssm復習

Spring Framework系統架構核心容器的學習IOC/DIIOC容器IOC使用對象時,由主動new產生的對象轉換為由外部提供對象,此過程中對象的創建的控制權交由外部,此思想稱為控制反轉, (實現了自己new的解耦) 對象創建的控制權Spring提供一個容器,稱為IOC容器 用來充當IOC思想的外部Bea…

ESP32:2.搭建UDP服務器

硬件&#xff1a;ESP32-Devkit-V4 MODEL:ESP32-32U 庫&#xff1a;ESP-IDF v5.4.1 系統&#xff1a;windows中的虛擬機 ubuntu 22.04 實現STA&#xff0c;主動連接AP后&#xff0c;打印IP地址&#xff0c;獲取IP后&#xff0c;創建socket&#xff0c;搭建UDP 服務器&#xff0…

【Linux】動靜態庫制作

&#x1f43c;故事背景假設今天你有一位舍友。你需要幫助他完成老師的作業。而他寫的代碼依賴兩個文件&#xff08;mymath.h,mystdio.h&#xff09;。但是這兩個文件的功能他不會寫&#xff0c;他只會調用。他的調用代碼:#include"mystdio.h" #include"mymath.h…

使用Database Navigator插件進行連接sqlite報錯invalid or incomplete database

解決方案 &#xff0c;將這個db.sqlite3文件拷貝到盤的文件中 &#xff0c;修改文件夾名字&#xff0c;重新使用絕對路徑訪問 db.sqlite3&#xff0c;將路徑名字的中文去掉 &#xff0c;不能有中文