vue響應式原理剖析

一、什么是響應式?

我們先來看一下響應式意味著什么?我們來看一段代碼:

  • m有一個初始化的值,有一段代碼使用了這個值;

  • 那么在m有一個新的值時,這段代碼可以自動重新執行;

let m = 20
console.log(m)
console.log(m * 2)m = 40

上面的這樣一種可以自動響應數據變量的代碼機制,我們就稱之為是響應式的。

那么我們再來看一下對象的響應式:

// 對象的響應式
const obj = {name: "wqx",age: 18
}// 修改obj對象
obj.name = "kobe"
obj.age = 20

二、響應式函數設計

首先,執行的代碼中可能不止一行代碼,所以我們可以將這些代碼放到一個函數中:

  • 那么我們的問題就變成了,當數據發生變化時,自動去執行某一個函數;

在這里插入圖片描述

但是有一個問題:在開發中我們是有很多的函數的,我們如何區分一個函數需要響應式,還是不需要響應式呢?

  • 很明顯,下面的函數中 foo 需要在obj的name發生變化時,重新執行,做出響應;

  • bar函數是一個完全獨立于obj的函數,它不需要執行任何響應式的操作;

const obj = {name: "wqx",age: 18
}function foo() {console.log(obj.name)console.log(obj.age)
}function bar() {console.log(obj.age + 100)
}

三、響應式函數的實現watchFn

但是我們怎么區分呢?

  • 這個時候我們封裝一個新的函數watchFn
  • 凡是傳入到watchFn的函數,就是需要響應式的;
  • 其他默認定義的函數都是不需要響應式的;
const obj = {name: "why",age: 18
}// function foo() {
//   console.log("foo:", obj.name)
//   console.log("foo", obj.age)
//   console.log("foo function")
// }// function bar() {
//   console.log("bar:", obj.name + " hello")
//   console.log("bar:", obj.age + 10)
//   console.log("bar function")
// }// 設置一個專門執行響應式函數的一個函數
const reactiveFns = []
function watchFn(fn) {reactiveFns.push(fn)fn()
}watchFn(function foo() {console.log("foo:", obj.name)console.log("foo", obj.age)console.log("foo function")
})watchFn(function bar() {console.log("bar:", obj.name + " hello")console.log("bar:", obj.age + 10)console.log("bar function")
})// 修改obj的屬性
console.log("name發生變化-----------------------")
obj.nam

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

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

相關文章

無人機航電系統電池技術解析!

1. 常用電池類型 鋰聚合物電池(LiPo) 特點:高能量密度、輕量化、放電效率高,是目前主流選擇。 缺點:對過充/過放敏感,需嚴格管理,存在輕微膨脹或起火風險。 鋰離子電池(Li-ion…

ubuntu下終端打不開的排查思路和解決方法

問題現象描述:ubuntu開機后系統桌面顯示正常,其他圖形化的app也都能打開無異常,唯獨只有terminal終端打不開,無論是鼠標點擊終端軟件,還是ctrlaltt,還是altF2后輸入gnome-terminal后按回車,這三…

Maven入門

1、簡介 Apache Maven是一個項目管理及自動構建工具,由Apache軟件基金會所提供。基于項目對象模型(縮寫:POM)概念,Maven利用一個中央信息片斷能管理一個項目的構建、報告和文檔等步驟。 2、作用 1)依賴導…

Rk3588,Opencv讀取Gmsl相機,Rga yuv422轉換rgb (降低CPU使用率)

RK3588, 使用OpenCv 讀取 gmsl 相機,獲得yuv422格式圖像, 使用 rga 轉換 rgb 圖像。減少cpu占用率. 查看相機信息 v4l2-ctl --all -d /dev/cam0 , 查看自己相機分辨率,輸出格式等信息,對應修改后續代碼測試… Driver Info:Driver name : rkcifCard type : rkc…

鴻蒙相機開發實戰:從設備適配到性能調優 —— 我的 ArkTS 錄像功能落地手記(API 15)

引言:為什么我要寫這份開發指南? 作為一名老技術,最近特別喜歡研究鴻蒙相機功能,而且目前已經更新到API15了,那么咱們更要好好研究一下。而且從手持云臺到車載記錄儀,每個項目都面臨獨特挑戰:車…

【NLP 49、提示工程 prompt engineering】

目錄 一、基本介紹 語言模型生成文本的基本特點 提示工程 prompt engineering 提示工程的優勢 使用注意事項 ① 安全問題 ② 可信度問題 ③ 時效性與專業性 二、應用場景 能 ≠ 適合 應用場景 —— 百科知識 應用場景 —— 寫文案 應用場景 —— 解釋 / 編寫…

數字轉換(c++)

【題目描述】 如果一個數 xx 的約數和 yy (不包括他本身)比他本身小,那么 xx 可以變成 yy ,yy 也可以變成 xx 。例如 44 可以變為 33 ,11 可以變為 77 。限定所有數字變換在不超過 nn 的正整數范圍內進行,…

如何同步fork的更新

當你fork了一個代碼倉庫后,要將其與原始源碼保持同步,可以按照以下步驟進行操作: 1. 添加原始倉庫作為遠程源 在本地命令行中,進入到你fork后的代碼倉庫目錄,然后使用以下命令添加原始倉庫(通常稱為upstr…

CentOS系統下安裝tesseract-ocr5.x版本

CentOS系統下安裝tesseract-ocr5.x版本 安裝依賴包: yum update -y yum install autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel yum install automake libtool bzip2 -y手動編譯安裝GCC(因系統默認安裝的GCC版本比較…

MyBatis打印SQL日志的配置

配置MyBatis打印日志的步驟如下&#xff0c;支持多種日志框架&#xff08;如Logback、Log4j2等&#xff09;&#xff1a; 一、選擇日志框架并添加依賴&#xff08;以常見組合為例&#xff09; 1. Logback&#xff08;推薦&#xff09; <!-- Maven 依賴 --> <depende…

SpringCould微服務架構之Docker(3)

1&#xff09;什么是鏡像和容器&#xff1f; 2&#xff09;DockerHub&#xff1a; 3&#xff09;docker的架構如下&#xff1a;

智慧高速,安全護航:視頻監控平臺助力高速公路高效運營

隨著我國高速公路里程的不斷增長&#xff0c;交通安全和運營效率面臨著前所未有的挑戰。傳統的監控方式已難以滿足現代化高速公路管理的需求&#xff0c;而監控視頻平臺的出現&#xff0c;則為高速公路的安全運營提供了強有力的技術支撐。高速公路視頻監控聯網解決方案 高速公路…

vue對文件進行加密,后臺解密后保存

為什么要做加密解密&#xff1f;主要是避免第三方檢測系統&#xff08;WAF&#xff09;檢測出文件有問題&#xff0c;但是文件是用戶上傳的&#xff0c;我們控制不了這些文件&#xff0c;所以主要是通過對用戶上傳文件進行加密&#xff0c;后臺解密后存儲。 前端&#xff1a; …

AI 在測試中的應用:從自動化到智能化的未來

閱讀原文 在上一篇中&#xff0c;我們探討了測試左移與右移如何構建質量保障的全流程閉環。現在&#xff0c;我們將目光投向更前沿的領域——AI在測試中的應用。這不僅是技術的演進&#xff0c;更是測試理念的革命&#xff1a;從"自動化執行"到"智能決策"…

Python:計算機二級:簡單應用

文章目錄 簡單應用第一題第二題第三題第四題題型共同特點核心知識點講解解題通用方法步驟 操作的難點1.數據的統計2.數據的篩選1. **條件判斷篩選**2. **結合文件操作篩選**3. **多條件組合篩選** 類似題目其它一題 簡單應用 第一題 題目 在考生文件夾下的PY202.py文件中&…

SQL Server 2022常見問題解答

以下是SQL Server 2022的常見問題解答,按主題分類整理: 一、安裝與升級 SQL Server 2022的系統要求是什么? 支持的操作系統:Windows Server 2016及以上、Linux(Ubuntu 20.04/22.04, RHEL 8/9等)。內存:至少4GB(建議8GB+)。磁盤空間:6GB以上,具體取決于安裝組件。如何…

力扣hot100_二分查找

二分查找 hot100_34.在排序數組中查找元素的第一個和最后一個位置 給你一個按照非遞減順序排列的整數數組 nums&#xff0c;和一個目標值 target。請你找出給定目標值在數組中的開始位置和結束位置。 如果數組中不存在目標值 target&#xff0c;返回 [-1, -1]。 你必須設計…

PostgreSQL詳解

第一章&#xff1a;環境部署與基礎操作 1.1 多平臺安裝詳解 Windows環境 圖形化安裝 下載EnterpriseDB安裝包&#xff08;含pgAdmin&#xff09; 關鍵配置項說明&#xff1a; # postgresql.conf優化項 max_connections 200 shared_buffers 4GB work_mem 32MB 服務管理命…

conda install 慢

針對 Solving environment: failed with initial frozen solve. Retrying with flexible solve 錯誤&#xff0c;以下是綜合解決方案&#xff1a; 一、核心解決方法? ?更新 Conda 至最新版本? 舊版本 Conda 的依賴解析算法可能存在缺陷&#xff0c;執行以下命令升級&#…

# 使用自定義Shell腳本hello快速配置Linux用戶賬戶

使用自定義Shell腳本快速配置Linux用戶賬戶 在學校實驗室管理Linux服務器&#xff0c;或者公司小團隊管理服務器時&#xff0c;大家需要一個能隔離自己服務&#xff0c;但是自己又需要對服務器的完整權限的情形。創建和配置用戶賬戶是一項常見但繁瑣的任務。特別是當你需要頻繁…