Vue響應式原理一:認識響應式邏輯

  1. 核心思想:當數據發生變化時,依賴該數據的代碼能夠自動重新執行
  2. Vue中的應用:在data或ref/reactive中定義的數據,當數據變化時template會自動更新
  3. template的本質: 是render()函數, 用變化之后的數據重新執行render()函數, 形成新的VNode, 然后對比新舊的VNode,這就是diff算法的一個事情, 然后決定那個VNode需要做實際的dom更新操作

1. 響應式意味著什么?

  1. 基本示例:
    // 響應式原理:初始化一個num值,當num值發生變化時,依賴num的代碼會自動重新執行,稱之為響應式的
    let num = 100;console.log(num *  2);
    console.log(num * num);num = 200
    
  2. 本質特征:數據變化 → 依賴代碼自動執行

2. 對象響應式

  1. 實際開發中更多處理對象響應式
    // 對象的響應式 
    const obj = { name: 'bar', age: 18
    }// 當obj.name變化時,只重新執行依賴name的代碼console.log(obj.name);// 當obj.age變化時,只重新執行依賴age的代碼console.log(obj.age);
    
  2. 精準響應:
    • 當obj.name變化時,只重新執行依賴name的代碼
    • 當obj.age變化時,只重新執行依賴age的代碼
  3. 依賴收集:需要自動識別哪些代碼依賴了對象的哪些屬性

3. 響應式函數設計

  1. 函數封裝:
    • 將依賴代碼封裝成函數: function foo(){console.log(obj.name)}
    • 當數據變化時執行對應函數
  2. 是否需要響應式:
    • 需要響應式的函數:內部使用了響應式數據
    • 不需要響應式的函數:完全獨立于響應式數據
    • Vue類比:類似于template最終轉為render函數,數據變化時重新執行render
    •    	// 對象的響應式 const obj = { name: 'bar', age: 18}//當obj.name和obj.age發生改變的時候,重新執行foo()和bar()// 把所有依賴對象obj的代碼封裝起來,function  foo () { // 響應式函數console.log(obj.name);console.log(obj.age);} function bar () {  // 響應式函數console.log(obj.age + 100);}// 修改obj對象obj.name = 'kobe'   ```
      
    1. 核心機制:
      • 建立數據與函數的依賴關系
      • 數據變化時觸發對應函數執行
    2. 實現要點:
      • 自動收集依賴關系
      • 精準觸發更新(只觸發真正依賴變化的函數)
    3. Vue原理:
      • 通過Proxy/Object.defineProperty監聽數據變化
      • 建立"數據屬性-依賴函數"的映射關系
      • 變化時通過映射關系找到并執行對應函數

4. 完整代碼如下:

	let num = 100;console.log(num *  2);console.log(num * num);num = 200// 響應式原理:初始化一個num值,當num值發生變化時,依賴num的代碼會自動重新執行,稱之為響應式的// Vue響應式原理的本質:// 通過data()或者ref、reactive定義的數據,也是通過監聽數據的變化,當數據發生變化,讓template重新執行渲染,就是響應式// template的本質是render()函數, 用變化之后的數據重新執行render()函數, 形成新的VNode, 然后對比新舊的VNode,//  這就是diff算法的一個事情, 然后決定那個VNode需要做實際的dom更新操作// 對象的響應式 const obj = { name: 'bar', age: 18}//當obj.name和obj.age發生改變的時候,重新執行foo()和bar()function  foo () {console.log(obj.name);console.log(obj.age);} function bar () {console.log(obj.age + 100);}// 修改obj對象obj.name = 'kobe'

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

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

相關文章

Redis:分組與設備在 Redis 中緩存存儲設計

一、緩存存儲結構設計 分組與設備的映射關系(使用 Set 結構): 鍵格式:采用 group:{groupId}:devices 的格式作為 Redis 中 Set 的鍵,例如 group:1:devices 就代表了分組 ID 為 1 的分組所關聯的設備集合。值內容&#…

Leetcode 3605. Minimum Stability Factor of Array

Leetcode 3605. Minimum Stability Factor of Array 1. 解題思路2. 代碼實現 題目鏈接:3605. Minimum Stability Factor of Array 1. 解題思路 這一題的核心思路是二分法,本質上就是我們給定一個常數kkk,然后考察是否存在一個構造使得能夠…

編譯安裝的Mysql5.7報“Couldn‘t find MySQL server (mysqld_safe)“的原因 筆記250709

編譯安裝的Mysql5.7報"Couldn’t find MySQL server (mysqld_safe)"的原因 筆記250709 MySQL 的安裝路徑與配置文件(如 my.cnf 或 mysql.server)中指定的 basedir 不一致。 mysqld_safe 文件實際位置與系統查找路徑不匹配(常見于自…

在 Ubuntu 下配置 oh-my-posh —— 普通用戶 + root 各自使用獨立主題(共享可執行)

🧩 在 Ubuntu 下配置 oh-my-posh —— 普通用戶 root 各自使用獨立主題(共享可執行)? 目標說明普通用戶 使用 tokyonight_storm 主題 root 用戶 使用 1_shell 主題 共用全局路徑下的 oh-my-posh 可執行文件 正確加載 Homebrew 到環境變量中…

Spring Boot 項目中的多數據源配置

關鍵詞:Spring Boot、多數據源配置、MySQL、SQL Server、Oracle、動態切換 ? 摘要 在實際企業級開發中,一個 Spring Boot 項目可能需要連接多個數據庫,比如 MySQL、SQL Server 和 Oracle。不同的業務模塊可能依賴不同的數據源,這…

MATLAB/Simulink電機控制仿真代做 同步異步永磁直驅磁阻雙饋無刷

以下是針對 MATLAB/Simulink 電機控制仿真 的系統性解決方案,涵蓋 同步電機、異步電機、永磁電機、直驅電機、磁阻電機、雙饋電機、無刷直流電機(BLDC) 的建模與控制策略實現,支持代做服務的技術細節和代碼示例。一、電機建模與仿…

限流算法深度探索:從理論到實踐的生產級避坑指南

凌晨3點,監控警報刺耳地尖叫著。我盯著屏幕上垂直下跌的服務可用性曲線,意識到那個被忽視的限流配置項終于引爆了——每秒1000次的支付請求正像洪水般沖垮我們的系統。這次事故讓我深刻理解:限流不是可選項,而是分布式系統的生存法…

企業級后臺管理系統的困境與飛算 JavaAI 的破局之道

企業級后臺管理系統如 CRM(客戶關系管理系統)、ERP(企業資源計劃系統)已成為支撐企業高效運轉的核心骨架。它們如同企業的 “神經中樞”,串聯起客戶數據、財務信息、供應鏈流程等關鍵環節,為決策制定、業務…

快速上手百寶箱搭建知識闖關游戲助手

引言:讓學習更有趣,AI 賦能知識闖關新體驗 1.在信息爆炸的時代,傳統的填鴨式教學方式已難以滿足現代用戶對高效、個性化和趣味化學習的需求。越來越多的學習者傾向于通過互動性強、參與感十足的方式獲取知識。在此背景下,游戲化學…

【YOLOv11-目標檢測】目標檢測數據格式(官方說明)

原文鏈接: https://docs.ultralytics.com/datasets/detect/ 寫在前面 訓練一個魯棒且準確的目標檢測模型需要一個全面的數據集。本文介紹:與Ultralytics YOLO模型兼容的各種數據集格式,并深入解析了它們的結構、使用方法以及如何在不同的格…

yolo8實現目標檢測

?步驟一:安裝 PyTorch(M1 專用)# 推薦使用官方 MPS 后端(Apple Metal 加速) pip install torch torchvision torchaudio確認是否使用了 Apple MPS:import torch print(torch.backends.mps.is_available()…

安全管理協議(SMP):配對流程、密鑰生成與防中間人攻擊——藍牙面試核心考點精解

一、SMP 核心知識點高頻考點解析1.1 SMP 在藍牙安全體系中的定位考點:SMP 的功能與協議棧位置解析: SMP(Security Manager Protocol,安全管理協議)是藍牙核心規范中負責設備配對、密鑰生成與安全連接的關鍵協議&#x…

U盤實現——U 盤類特殊命令

文章目錄 U 盤類特殊命令U 盤的命令封包命令階段數據階段狀態階段get max luninquiry(0x12)read format capacities(0x23)read capacity(0x25)mode sense(0x1a)test unit ready(0x00)read(10) 0x28write(10) 0x2aU 盤類特殊命令 U 盤的命令封包 命令階段 命令階段主要由主機通…

深度帖:瀏覽器的事件循環與JS異步

一、瀏覽器進程 早期的瀏覽器是單進程的,所有功能雜糅在一個進程中;現在的瀏覽器是多進程的,包含瀏覽器進程、網絡進程、渲染進程等等,每個進程負責的工作不同。瀏覽器進程:負責界面顯示(地址欄、書簽、歷史…

Linux網絡:UDP socket創建流程與簡單通信

本文介紹 UDP 服務端與客戶端 的創建流程&#xff0c;和相關的函數接口 核心流程 創建 socket → socket()填寫服務器地址信息 → sockaddr_in 結構體綁定地址和端口 → bind()接收并響應客戶端數據 → recvfrom() / sendto()socket() #include<sys/so…

windows內核研究(系統調用 1)

WindowsAPI函數的調用過程什么是WindowsApi&#xff1f;Windows API&#xff08;Application Programming Interface&#xff0c;應用程序編程接口&#xff09;是微軟為Windows操作系統提供的一套系統級編程接口&#xff0c;允許開發者與操作系統內核、硬件、系統服務等進行交互…

【前端】異步任務風控驗證與輪詢機制技術方案(通用筆記版)

一、背景場景 在某類生成任務中&#xff0c;例如用戶點擊“執行任務”按鈕后觸發一個較耗時的后端操作&#xff08;如生成報告、渲染圖像、轉碼視頻等&#xff09;&#xff0c;由于其調用了模型、渲染服務或需要較長處理時間&#xff0c;為了防止接口被頻繁惡意調用&#xff0c…

Vim 編輯器常用操作詳解(新手快速上手指南)

&#x1f4bb; Vim 編輯器常用操作詳解&#xff08;新手快速上手指南&#xff09;作者&#xff1a;Lixin 日期&#xff1a;2025-07-09 學習內容&#xff1a;Vim 編輯器基礎 常用快捷鍵 Xshell/Xftp連接 Linux基本操作 學習目標&#xff1a;掌握 Vim 的三種常用模式切換與基本…

OpenGL 生成深度圖與點云

文章目錄 一、簡介二、實現代碼三、實現效果一、簡介 這里基于OpenGL實現對一個Mesh對象深度圖的獲取,思路其實很簡單,直接通過glReadPixels函數獲取整個OpenGL中的深度緩沖數據即可;那么反過來我們如果有了這個深度圖之后,也可以基于每個像素點的深度值,反算出圖像中的深…

25春云曦期末考復現

Web 瘋狂星期四 <?php$tg1u$_GET[tg1u];if(!preg_match("/0|1|[3-9]|\~|\|\|\#|\\$|\%|\^|\&|\*|\&#xff08;|\&#xff09;|\-|\|\|\{|\[|\]|\}|\:|\|\"|\,|\<|\.|\>|\/|\?|\\\\|localeconv|pos|current|print|var|dump|getallheaders|get|define…