日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

有使用過vm.$set嗎,原理是什么?

來源: 責編: 時間:2024-07-09 06:59:09 755觀看
導讀vm.$set 是 Vue.js 提供的一個方法,用于在 Vue 實例中動態添加響應式屬性。它的主要作用是確保新添加的屬性能夠被 Vue 的響應式系統監測到,從而觸發視圖的更新。使用示例假設我們有一個 Vue 實例var vm = new Vue({ d

vm.$set 是 Vue.js 提供的一個方法,用于在 Vue 實例中動態添加響應式屬性。它的主要作用是確保新添加的屬性能夠被 Vue 的響應式系統監測到,從而觸發視圖的更新。gBg28資訊網——每日最新資訊28at.com

使用示例

假設我們有一個 Vue 實例gBg28資訊網——每日最新資訊28at.com

var vm = new Vue({  data: {    user: {      name: 'Alice'    }  }});

我們希望在 user 對象中添加一個新的屬性 age。直接添加不會觸發視圖更新gBg28資訊網——每日最新資訊28at.com

vm.user.age = 25; // 直接添加不會觸發視圖更新

為了確保新添加的屬性是響應式的,可以使用 vm.$setgBg28資訊網——每日最新資訊28at.com

vm.$set(vm.user, 'age', 25);

原理

Vue 的響應式系統是基于 Object.defineProperty 實現的。當一個對象被添加到 Vue 實例的 data 中時,Vue 會遞歸地遍歷該對象的所有屬性,并使用 Object.defineProperty 將這些屬性轉換為 getter 和 setter,從而實現響應式。然而,直接添加的新屬性并沒有通過這種方式定義,因此 Vue 無法檢測到這些新屬性的變化。vm.$set 方法內部使用了 Vue 的 set 方法,它會確保新添加的屬性也能通過 Object.defineProperty 轉換為響應式屬性。gBg28資訊網——每日最新資訊28at.com

vm.$set 的實現

Vue 源碼中 set 方法的實現(Vue 2.x)大致如下:gBg28資訊網——每日最新資訊28at.com

function set(target, key, val) {  if (Array.isArray(target) && isValidArrayIndex(key)) {    target.length = Math.max(target.length, key);    target.splice(key, 1, val);    return val;  }  if (key in target && !(key in Object.prototype)) {    target[key] = val;    return val;  }  const ob = target.__ob__;  if (!ob) {    target[key] = val;    return val;  }  defineReactive(ob.value, key, val);  ob.dep.notify();  return val;}function defineReactive(obj, key, val) {  const dep = new Dep();  let childOb = observe(val);  Object.defineProperty(obj, key, {    enumerable: true,    configurable: true,    get: function reactiveGetter() {      const value = val;      if (Dep.target) {        dep.depend();        if (childOb) {          childOb.dep.depend();        }      }      return value;    },    set: function reactiveSetter(newVal) {      const value = val;      if (newVal === value || (newVal !== newVal && value !== value)) {        return;      }      val = newVal;      childOb = observe(newVal);      dep.notify();    }  });}

總結

vm.$set 方法在 Vue 中用于動態添加響應式屬性,確保新屬性能夠被 Vue 的響應式系統監測到。它通過 Object.defineProperty 將新屬性定義為響應式屬性,并觸發依賴更新,確保視圖能夠正確更新。gBg28資訊網——每日最新資訊28at.com

使用工具學會使用只是第一步,掌握原理并能夠通過原理解決問題才是關鍵,在平時的開發中,使用時多數,然而在遇到復雜問題或者優化時候掌握原理會提高開發效率。gBg28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-99638-0.html有使用過vm.$set嗎,原理是什么?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 運小沓 Cuber?數字員工 3.0 發布,WAIC2024 壹沓科技供應鏈論壇順利舉辦

下一篇: 我跟你說@RefreshScope跟Spring事件監聽一起用有坑!

標簽:
  • 熱門焦點
  • 中興AX5400Pro+上手體驗:再升級 雙2.5G網口+USB 3.0這次全都有

    2021年11月的時候,中興先后發布了兩款路由器產品,中興AX5400和中興AX5400 Pro,從產品命名上就不難看出這是隸屬于同一系列的,但在外觀設計上這兩款產品可以說是完全沒一點關系
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 三萬字盤點 Spring 九大核心基礎功能

    大家好,我是三友~~今天來跟大家聊一聊Spring的9大核心基礎功能。話不多說,先上目錄:圖片友情提示,本文過長,建議收藏,嘿嘿嘿!一、資源管理資源管理是Spring的一個核心的基礎功能,不
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 一條抖音4億人圍觀 ! 這家MCN比無憂傳媒還野

    作者:Hiu 來源:互聯網品牌官01 擦邊少女空降熱搜,幕后推手曝光被網友譽為“純欲天花板”的女網紅井川里予,近期因為一組哥特風照片登上熱搜,引發了一場互聯網世界關于
  • 小米公益基金會捐贈2500萬元馳援北京、河北暴雨救災

    8月2日消息,今日小米科技創始人雷軍在其微博上發布消息稱,小米公益基金會宣布捐贈2500萬元馳援北京、河北暴雨救災。攜手抗災,京冀安康!以下為公告原文
  • 機構稱Q2國內智能手機銷量同比下滑4% vivo份額重回第1

    7月29日消息,根據市場調查機構Counterpoint Research公布的最新報告,2023年第2季度中國智能手機銷量同比下降4%,創新自2014年以來第2季度銷量新低。報
  • DRAM存儲器10月價格下跌,NAND閃存本月價格與上月持平

    10月30日,據韓國媒體消息,自今年年初以來一直在上漲的 DRAM 存儲器的交易價格僅在本月就下跌了近 10%,此次是全年首次降價,而NAND 閃存本月價格與上月持平。市
Top 主站蜘蛛池模板: 乐业县| 响水县| 喜德县| 仪征市| 黄骅市| 林州市| 太湖县| 留坝县| 红原县| 宜丰县| 明水县| 莫力| 郑州市| 延寿县| 张掖市| 九寨沟县| 临城县| 冷水江市| 大兴区| 修水县| 凤翔县| 丰县| 勃利县| 江陵县| 嘉黎县| 西乌| 宁武县| 临泉县| 嘉禾县| 湛江市| 尉犁县| 长白| 江油市| 九龙坡区| 织金县| 威信县| 资兴市| 栾城县| 澄江县| 庆安县| 金昌市|