深入Vue原理_數據響應式

在這里插入圖片描述

歡迎各位小伙伴們!
為大家推薦一款刷題神奇哦 點擊鏈接訪問牛客網
各大互聯網大廠面試真題。從基礎到入階乃至原理刨析類面試題 應有盡有,趕快來裝備自己吧!助你面試穩操勝券,solo全場面試官

數據響應式

  • 響應式是什么
  • 如何實現數據響應式
  • 實現對象屬性攔截
  • 通用的劫持方案
  • 總結
  • 面試法寶
    • 本期推薦

響應式是什么

簡而言之就是數據變頁面變

如何實現數據響應式

在Javascript里實現數據響應式一般有倆種方案,分別對應著vue2.x 和 vue3.x使用的方式,他們分別是:

  1. 對象屬性攔截 (vue2.x)

    Object.defineProperty

  2. 對象整體代理 (vue3.x)

    Proxy

其中對象屬性攔截,道理都是相通的

實現對象屬性攔截

字面量對象定義

let data = {name:'小蘭同學'
}

Object.defineProperty對象定義

let data = {}
Object.defineProperty(data,'name',{// 訪問name屬性就會執行此方法 返回值就是獲取到的值get(){console.log('name屬性被獲取了')return '小蘭同學'},// 設置新值就會執行此方法 newVal就是設置的新值set(newVal){console.log('name屬性被設置新值了')console.log(newVal)}
})

我們可以通過 data.name 去獲取值,也可以通過 data.name=‘小趙同學’去賦值

存在問題演示

最后獲取name值沒有被改變
在這里插入圖片描述

解決方案

我們可以 通過一個中間變量 _name 來中轉get函數和set函數之間的聯動

let data = {}
let _name = '小蘭同學'
Object.defineProperty(data,'name',{// 訪問name屬性就會執行此方法 返回值就是獲取到的值get(){console.log('name屬性被獲取了')return _name},// 設置新值就會執行此方法 newVal就是設置的新值set(newVal){console.log('name屬性被設置新值了')console.log(newVal)_name = newVal}
})

結果驗證

在這里插入圖片描述

通用的劫持方案

大家想想看,如果現在有一份已經聲明好了數據的對象,我們如何通過劫持的方法把每一個屬性都變成setter和getter的形式

下面是一份已經聲明好的數據

let data = {name: '小蘭同學',age: 18,height:180
}

我們想讓里面所有的屬性都變成響應式的,并且get和set方法中對于每個屬性值的操作是連通的

let data = {name: '小蘭同學',age: 18,height:180
}// 遍歷每一個屬性
Object.keys(data).forEach((key)=>{// key 屬性名// data[key] 屬性值defineReactive(data,key,data[key])
})
// 響應式轉化方法
function defineReactive(data,key,value){Object.defineProperty(data,key,{get(){return value},set(newVal){value = newVal }})
}

結構說明:這個地方實際上使用了閉包的特性,看下圖,在每一次的defineReactive函數執行的時候,都會形成一塊獨立的函數作用域,傳入的value 因為閉包的關系會常駐內存,這樣一來,每個defineReactive函數中的value 會作為各自set和get函數操作的局部變量

在這里插入圖片描述

總結

  1. 所謂的響應式其實就是攔截對象屬性的訪問和設置,插入一些我們自己想要做的事情
  2. 在Javascript中能實現響應式攔截的方法有倆種,Object.defineProperty方法和Proxy對象代理
  3. 回歸到vue2.x中的data配置項,只要放到了data里的數據,不管層級多深不管你最終會不會用到這個數據都會進行遞歸響應式處理,所以要求我們如非必要,盡量不要添加太多的冗余數據在data中
  4. 需要了解vue3.x中,解決了2中對于數據響應式處理的無端性能消耗,使用的手段是Proxy劫持對象整體 + 惰性處理(用到了才進行響應式轉換)

面試法寶

很多伙伴找到我詢問面試題,問我針對于前端有沒有比較體系化的面試題總結,今天就給大家推薦這款面試法寶
點擊鏈接直達

https://www.nowcoder.com/link/jihexinliang260

就是我們的牛客網,各大互聯網大廠面試真題。從基礎到入階乃至原理刨析類面試題 應有盡有,趕快來裝備自己吧!助你面試穩操勝券,solo全場面試官
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

本期推薦

算法是學習人工智能的基石,全書通過116個典型范例+86個AI經典算法+40道經典習題+42道面試真題+42個高手點撥+4套算法職位招聘真題+19個項目,用算法解析人工智能,并以Python為工具進行算法思想和解決方案的有效實踐。
在這里插入圖片描述
本書以零基礎講解為宗旨,詳細講解了常用的人工智能算法,并與實際應用相結合,內容循序漸進,案例豐富翔實,旨在幫助讀者掌握人工智能的算法基礎。全書分為4篇,共20章。其中第1篇為基礎算法篇,從第1章到第9章,主要講述排序、查找、線性結構、樹、散列、圖、堆棧等基本數據結構算法;第2篇為機器學習算法篇,從第10章到第14章,主要講述分類算法、回歸算法、聚類算法、降維算法和集成學習算法;第3篇為強化學習算法篇,從第15章到第16章,主要講述基于價值的強化學習算法和基于策略的強化學習算法;第4篇為深度學習算法篇,從第17章到第19章,主要講述神經網絡模型算法、循環神經網絡算法和卷積神經網絡算法等內容。本書適合準備從事數據科學與人工智能相關行業的讀者。

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

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

相關文章

python scipy樣條插值函數大全(interpolate里interpld函數)

scipy樣條插值 scipy樣條插值1、樣條插值法是一種以可變樣條來作出一條經過一系列點的光滑曲線的數學方法。插值樣條是由一些多項式組成的,每一個多項式都是由相鄰的兩個數據點決定的,這樣,任意的兩個相鄰的多項式以及它們的導數(不包括仇階導…

EKS獨領風騷

前言 隨著公司的逐漸發展,開拓了更加多的子項目與小程序,這些都需要進行宣傳,但是管理以及部署新的應用是一個繁瑣的工程,部署麻煩而且更新業務的時候非常不方面。尤其面向用戶的時候,體驗感很差。于是想要使用docker…

Linux進程管理之ps的使用

主題Linux進程管理之ps工具的使用 一ps工具的介紹 ps: process state 進程狀態ps - report a snapshot of the current processesLinux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中 默認顯示的內容很少 [rootcentos65 ~]# psPID TTY TIME CMD2018 pts/0 …

openstack Q版部署-----安裝報錯問題

1、實例開機提示找不到磁盤Booting from Hard Disk... GRUB. 開啟 CPU 虛擬化支持。 將計算節點 nova.conf 配置修改如下即可: [libvirt] cpu_mode none virt_type qemu重啟服務 systemctl restart libvirtd.service openstack-nova-compute.service 2、錯誤: 超過…

深入Vue原理_雙向數據綁定(視圖/數據)

歡迎各位小伙伴們! 為大家推薦一款刷題神奇哦 點擊鏈接訪問牛客網 各大互聯網大廠面試真題。從基礎到入階乃至原理刨析類面試題 應有盡有,趕快來裝備自己吧!助你面試穩操勝券,solo全場面試官 文章目錄數據的變化反應到視圖命令式操…

【BZOJ3894】文理分科

已經連續很久沒有當場想出來題了。。。。 $yyb$認為這是一道傻逼題,但是我并不這么認為。。。。 題面 https://www.lydsy.com/JudgeOnline/problem.php?id3894 題解 加點:三叉戟結構的小技巧。 假設割$S$表示不學文,割$T$表示不學理。 對于一…

CodeForces 1131G. Most Dangerous Shark

題目簡述&#xff1a;從左到右依次有$n \leq 10^7$個Domino骨牌&#xff0c;高度為$h_i$&#xff0c;手動推倒他的花費為$c_i$。每個骨牌之間的距離為$1$。一個骨牌可以被向左或者向右推倒。當第$i$個骨牌被推倒時&#xff0c;他會以相同方向推倒與其距離$<h_i$的所有骨牌。…

大廠直通車【C認證】踵磅來襲

歡迎各位小伙伴們&#xff01; 首先為大家推薦一款刷題神奇哦 點擊鏈接訪問牛客網 各大互聯網大廠面試真題。從基礎到入階乃至原理刨析類面試題 應有盡有&#xff0c;趕快來裝備自己吧&#xff01;助你面試穩操勝券&#xff0c;solo全場面試官 你還在以為CSDN僅僅是一個簡簡單單…

理解JavaScript中的原型繼承(2)

兩年前在我學習JavaScript的時候我就寫過兩篇關于原型繼承的博客&#xff1a; 理解JavaScript中原型繼承 JavaScript中的原型繼承 這兩篇博客講的都是原型的使用&#xff0c;其中一篇還有我學習時的錯誤理解。今天看《Understanding Scopes》這讓我從新思考了一下原型繼承&…

深入Vue原理_全面剖析發布訂閱模式

文章目錄發布訂閱模式優化優化思路思考理解發布訂閱模式(自定義事件)收集更新函數觸發更新函數6.5 總結總結寫在最后本期推薦歡迎各位小伙伴們&#xff01; 為大家推薦一款刷題神奇哦 點擊鏈接訪問牛客網 各大互聯網大廠面試真題。從基礎到入階乃至原理刨析類面試題 應有盡有&a…

前端面試系列-JS 異步編程

并發與并行的區別&#xff1f; 并發是宏觀概念&#xff0c;我分別有任務 A 和任務 B&#xff0c;在一段時間內通過任務間的切換完成了這兩個任務&#xff0c;這種情況就可以稱之為并發。并行是微觀概念&#xff0c;假設 CPU 中存在兩個核心&#xff0c;那么我就可以同時完成任務…

web前端發展歷程

總覽前端發展史前言瀏覽器的發展史走進前端HTMLCSSjavaScript小前端時代大前端時代寫在最后前言 目前在IT公司中前端的崗位越來越成為不可或缺的&#xff0c;前端的地位也愈見明顯&#xff0c;很多學校已經體系的傳授前端課程&#xff0c;眾多培訓機構也將前端知識作為了主流課…

修改wordpress上傳文件大小限制

1. 登陸wordpress使用的數據庫&#xff0c;切換到使用的database 2. 操作如下&#xff1a; > select meta_key from wp_sitemeta; > select meta_key,meta_value from wp_sitemeta where meta_keyfileupload_maxk; 修改為20M: > update wp_sitemeta set meta_value204…

php的符號的排序大小

轉載于:https://www.cnblogs.com/cjjjj/p/10433334.html

淺談 HTTP 和 HTTPS

很多前端伙伴問題有沒有體系的面試題&#xff1f; 今天為大家推薦一款刷題神奇哦 點擊鏈接訪問牛客網 各大互聯網大廠面試真題。從基礎到入階乃至原理刨析類面試題 應有盡有&#xff0c;趕快來裝備自己吧&#xff01;助你面試穩操勝券&#xff0c;solo全場面試官 淺談 HTTP 和 …

Ubuntu 搭建 GitLab 筆記 ***

簡介 GitLab 社區版可以提供許多與 GitHub 相同的功能&#xff0c;且部署在屬于自己的機器上&#xff0c;我們會因為網絡及其他一些問題而不便使用 GitHub &#xff0c;這時部署一個 GitLab 是最好的選擇。 下載 GitLab 并安裝 我的環境是 Ubuntu 16.04 下進行部署操作。 GitLa…

在瀏覽器輸入URL到頁面展示發生了什么?

輸入URL后查詢緩存DNS服務器TCP三次握手HTTP協議包瀏覽器處理HTML文檔TCP 和 UDP 的區別寫在最后很多前端伙伴問題有沒有體系的面試題&#xff1f; 今天為大家推薦一款刷題神奇哦 點擊鏈接訪問牛客網 各大互聯網大廠面試真題。從基礎到入階乃至原理刨析類面試題 應有盡有&#…

iOS 高級去水印,涂鴉去水印

目前在研究一下圖像的處理&#xff0c;看了一下相關的軟件&#xff0c;比如&#xff1a;《去水印大師》&#xff0c;究竟去水印是怎么處理的呢&#xff1f;看圖分析。 一共是三個功能&#xff1a;快速去水印、高級去水印、涂鴉去水印 快速去水印&#xff1a;暫時沒找到好的處理…

Failed to execute goal maven-gpg-plugin 1.5 Sign

問題描述&#xff1a; 解決辦法&#xff1a;跳過maven-gpg-plugin <build> <pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-gpg-plugin</artifactId><configuration&g…

打造硬核敲門磚——簡歷

文章目錄 前言打造簡歷篇幅模板個人信息專業技能工作經歷項目經歷教育經歷個人總結簡歷格式寫在最后前言 作為高校的學生,你是否已經開始設想你以后的工作?作為職場的員工,你是否已經準備更換下一份工作了?不論你現在是什么身份、處于什么階段,這篇文章都能夠幫到你,只要…