国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Vue響應式原理Observer、Dep、Watcher理解

2024-05-06 15:38:25
字體:
來源:轉載
供稿:網友

開篇

最近在學習Vue的源碼,看了網上一些大神的博客,看起來感覺還是蠻吃力的。自己記錄一下學習的理解,希望能夠達到簡單易懂,不看源碼也能理解的效果😆

Object.defineProperty

相信很多同學或多或少都了解Vue的響應式原理是通過Object.defineProperty實現的。被Object.defineProperty綁定過的對象,會變成「響應式」化。也就是改變這個對象的時候會觸發get和set事件。進而觸發一些視圖更新。舉個栗子🌰

function defineReactive (obj, key, val) {  Object.defineProperty(obj, key, {    enumerable: true,    configurable: true,    get: () => {      console.log('我被讀了,我要不要做點什么好?');      return val;    },    set: newVal => {      if (val === newVal) {        return;      }      val = newVal;      console.log("數據被改變了,我要把新的值渲染到頁面上去!");    }  })}let data = {  text: 'hello world',};// 對data上的text屬性進行綁定defineReactive(data, 'text', data.text);console.log(data.text); // 控制臺輸出 <我被讀了,我要不要做點什么好?>data.text = 'hello Vue'; // 控制臺輸出 <hello Vue && 數據被改變了,我要把新的值渲染到頁面上去!>

Observer 「響應式」

Vue中用Observer類來管理上述響應式化Object.defineProperty的過程。我們可以用如下代碼來描述,將this.data也就是我們在Vue代碼中定義的data屬性全部進行「響應式」綁定。

class Observer {  constructor() {    // 響應式綁定數據通過方法   observe(this.data);  }}export function observe (data) {  const keys = Object.keys(data);  for (let i = 0; i < keys.length; i++) {    // 將data中我們定義的每個屬性進行響應式綁定    defineReactive(obj, keys[i]);  }}

Dep 「依賴管理」

什么是依賴?

相信沒有看過源碼或者剛接觸Dep這個詞的同學都會比較懵。那Dep究竟是用來做什么的呢? 我們通過defineReactive方法將data中的數據進行響應式后,雖然可以監聽到數據的變化了,那我們怎么處理通知視圖就更新呢?

Dep就是幫我們收集【究竟要通知到哪里的】。比如下面的代碼案例,我們發現,雖然data中有text和message屬性,但是只有message被渲染到頁面上,至于text無論怎么變化都影響不到視圖的展示,因此我們僅僅對message進行收集即可,可以避免一些無用的工作。

那這個時候message的Dep就收集到了一個依賴,這個依賴就是用來管理data中message變化的。

<div>  <p>{{message}}</p></div>
data: {  text: 'hello world',  message: 'hello vue',}

當使用watch屬性時,也就是開發者自定義的監聽某個data中屬性的變化。比如監聽message的變化,message變化時我們就要通知到watch這個鉤子,讓它去執行回調函數。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 京山县| 陇西县| 奉节县| 辰溪县| 攀枝花市| 仙游县| 江山市| 叙永县| 吴忠市| 鹤壁市| 香格里拉县| 古浪县| 无锡市| 贵南县| 梓潼县| 简阳市| 沅陵县| 托克逊县| 晋宁县| 应城市| 灵寿县| 嘉义市| 班戈县| 安新县| 临沂市| 汉中市| 和林格尔县| 莫力| 文安县| 清苑县| 曲靖市| 苏尼特左旗| 建昌县| 鄂伦春自治旗| 昭觉县| 西盟| 安泽县| 郸城县| 隆回县| 建水县| 金坛市|