對Vue2響應式原理的理解-總結

根據這張圖進行總結

在這里插入圖片描述

組件實例初始化階段,通過 observe() 方法對 data 對象進行遞歸遍歷。在這個過程中,Vue 使用 Object.defineProperty()data 中的每個屬性定義 gettersetter 來攔截對象屬性的“讀取“操作和“寫入”操作。

Vue 的依賴追蹤是通過 WatcherDep 協同完成的。其中,每個響應式屬性背后都對應一個 Dep 對象,負責收集依賴(即 Watcher)并在數據變更時通知更新。

組件掛載階段,Vue 會自動創建一個渲染 Watcher。該 Watcher 會執行組件的 render 函數,并在執行過程中讀取模板中所用到的響應式數據。這些數據的讀取會觸發它們的 getter,從而使當前正在運行的 Watcher(即渲染 Watcher)被 Dep 收集為依賴。

這個過程叫做 依賴收集(Dependency Collection)。大概的過程是:

  • Watcher 在評估表達式(執行它所監聽的函數或訪問的數據)或渲染函數之前,把自身賦值給 Dep.target;
  • 當訪問響應式屬性時,觸發其 getter;
  • 在 getter 中調用 dep.depend(),把當前 Dep.target(Watcher)添加到依賴列表中;
  • 當屬性變化時,setter 被觸發,Dep 會通過 dep.notify() 通知所有依賴該屬性的 Watcher 執行更新邏輯。

Vue 中的 Watcher 有三種類型:

  1. 渲染 Watcher:用于渲染視圖;
  2. 計算屬性 Watcher:用于計算屬性的緩存與依賴追蹤;
  3. 偵聽器 Watcher:用于執行 watch 回調函數。

總結:

在 Vue 的響應式系統中,Observer 負責劫持數據,Dep 負責依賴管理,而 Watcher 是響應式更新的執行者。組件掛載時創建渲染 Watcher,讀取數據觸發 getter,完成依賴收集。數據變更時,依賴該數據的 Watcher 會被通知更新,從而驅動視圖響應式變化。

組件關鍵詞作用
Observer劫持將數據變成響應式
Dep收集依賴保存 Watcher 列表
Watcher更新邏輯數據變了就執行
Compile模板解析把模板變成 Watcher
View自動更新Watcher 通知它變化

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

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

相關文章

基于深度學習的智能音頻增強系統:技術與實踐

前言 在音頻處理領域,音頻增強技術一直是研究的熱點。音頻增強的目標是改善音頻信號的質量,去除噪聲、回聲等干擾,提高音頻的可聽性和可用性。傳統的音頻增強方法主要依賴于信號處理技術,如濾波器設計、頻譜減法等,但這…

從代碼學習深度強化學習 - DQN PyTorch版

文章目錄 前言DQN 算法核心思想Q-Learning 與函數近似經驗回放 (Experience Replay)目標網絡 (Target Network)PyTorch 代碼實現詳解1. 環境與輔助函數2. 經驗回放池 (ReplayBuffer)3. Q網絡 (Qnet)4. DQN 主類5. 訓練循環6. 設置超參數與開始訓練訓練結果與分析總結前言 歡迎…

AI與大數據如何驅動工業品電商平臺的智能決策?

在轟鳴的工廠里,一臺關鍵設備因某個密封圈失效而驟然停機。生產線停滯、訂單延誤、經濟損失每分鐘都在擴大。此刻,采購經理在工業品電商平臺上瘋狂搜索,卻迷失在海量零件參數與供應商信息中。工業品的沉默,往往意味著生產線的沉默…

連接器全解析:數據庫連接器和文件連接器的區別和聯系

目錄 一、數據庫連接器和文件連接器的基本概念 1. 數據庫連接器 2. 文件連接器 二、數據庫連接器和文件連接器的區別 1. 數據存儲方式 2. 數據處理能力 3. 數據安全性 4. 數據更新頻率 三、數據庫連接器和文件連接器的聯系 1. 數據交互 2. 數據處理流程 3. 應用場景…

Uniapp 中根據不同離開頁面方式處理 `onHide` 的方法

Uniapp 中根據不同離開頁面方式處理 onHide 的方法 在 Uniapp 開發中,onHide 生命周期會在頁面隱藏時觸發,但默認無法直接區分用戶是通過何種方式離開頁面的。不過我們可以通過組合其他鉤子函數和路由事件來實現對不同離開方式的識別和處理。 一、常見…

使用Visual Studio Code實現文件比較功能

Visual Studio Code 中如何使用文件比較功能? 在 Visual Studio Code (VS Code) 中使用“比較文件”功能來查看兩個文件之間的差異是非常直觀的。 以下是具體步驟: 使用“比較文件”功能 打開 VS Code: 啟動 VS Code 編輯器。 打開第一…

(40)華為云平臺cce中掛載nginx等配置文件方法

直接在負載中添加數據存儲: 將nginx.conf文件分別存放在集群中每個cce節點對應的路徑下即可(防止pod飄節點找不到nginx.conf) 2.直接添加配置項與密鑰: 添加對應的key與value即可(nginx.conf的具體配置寫在value中&am…

web布局09

Flexbox 是現代 Web 布局的主流技術之一,它提供了一種有效的方式來定位 、排序 和 分布元素,即使在視窗或元素大小不明確或動態變化時亦是如此。Flexbox 的優勢可以用一句話來表達:“在不需要復雜的計算之下,元素的大小和順序可以…

Redux and vue devtools插件下載

Redux and vue devtools插件下載 插件下載地址 收藏貓插件

深入理解SQLMesh中的SCD Type 2:緩慢變化維度的實現與管理

在數據倉庫和商業智能領域,處理隨時間變化的數據是一個常見且具有挑戰性的任務。緩慢變化維度(Slowly Changing Dimensions, SCD)是解決這一問題的經典模式。本文將深入探討SQLMesh中SCD Type 2的實現方式、配置選項以及實際應用場景。 什么是SCD Type 2&#xff1f…

如何保證MySQL與Redis數據一致性方案詳解

目錄 一、數據不一致性的根源 1.1 典型不一致場景 1.2 關鍵矛盾點 二、一致性保障策略 2.1 基礎策略:更新數據庫與緩存的時序選擇 (1)先更新數據庫,再刪除緩存 (2)先刪緩存,再更新數據庫…

JSON-RPC 2.0 與 1.0 對比總結

JSON-RPC 2.0 與 1.0 對比總結 一、核心特性對比 特性JSON-RPC 1.0JSON-RPC 2.0協議版本標識無顯式版本字段,依賴 method 和參數結構區分[5]。強制包含 "jsonrpc": "2.0" 字段,明確版本[1][4]。參數結構僅支持索引數組(…

C# 事件詳解

C# 事件 一、事件二、事件的應用三、事件的自定義聲明 一、事件 定義:“a thing that happens, especially something important” / “能夠發生的什么事情”角色:使對象或類具備通知能力的成員使用:用于對象或類間的動作協調與信息傳遞事件…

青少年編程與數學 01-011 系統軟件簡介 24 Kubernetes 容器編排系統

青少年編程與數學 01-011 系統軟件簡介 24 Kubernetes 容器編排系統 一、歷史沿革(一)起源1. Google 內部起源 (二)開源后的關鍵事件(三)社區治理 二、技術架構(一)分層設計哲學&…

[C++] : 談談IO流

C IO流 引言 談到IO流,有些讀者可能腦海中第一個想到的C程序員的最基礎的std::cout , std::cin兩個類的使用,對的,這個就是一個典型的IO流,所以逆天我們這篇文章會基于C IO流的原理和各種應用場景進行深入的解讀。 C…

Kafka 3.0零拷貝技術全鏈路源碼深度剖析:從發送端到日志存儲的極致優化

在分布式消息系統領域,Kafka憑借高吞吐、低延遲的特性成為行業首選。而零拷貝技術作為Kafka性能優化的核心引擎,貫穿于消息從生產者發送、Broker接收存儲到消費者讀取的全生命周期。本文基于Kafka 3.0版本,深入源碼層面,對零拷貝技…

利益驅動機制下開源AI智能名片鏈動2+1模式與S2B2C商城小程序的商業協同研究

摘要:在數字經濟時代,利益驅動作為用戶行為激勵的核心邏輯,正通過技術創新實現模式升級。本文基于“利益驅動”理論框架,結合“開源AI智能名片鏈動21模式S2B2C商城小程序”的技術架構,系統分析物質利益(返現…

pytest的前置后置條件

1. setUp()和tearDown() setup()函數主要是進行測試前的初始化工作,比如:在接口測試前面做一些前置的參數賦值,數據庫操作等等。 teardown()函數是測試后的清除工作,比如:參數還原或銷毀,數據庫的還原恢復…

Python 自動化運維與DevOps實踐

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 基礎設施即代碼(IaC) 使用Fabric執行遠程命令 python 復制 下載 from fabric import Connectiondef deploy_app():# 連接到遠程服務器with Connection(web-server.example.com, userdeploy,…

css3 文本效果(text-shadow、text-overflow、word-wrap、word-break)文本陰影、文本換行、文本溢出并隱藏顯示省略號

1. 文本陰影(text-shadow) 1.1 基本語法 text-shadow: h-shadow v-shadow blur-radius color;參數說明: h-shadow:必需。水平陰影的位置。允許負值。 正值:向右偏移負值:向左偏移 v-shadow:必…