91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue.js中響應式的原理是什么

發布時間:2021-07-09 11:09:06 來源:億速云 閱讀:135 作者:Leah 欄目:web開發

今天就跟大家聊聊有關Vue.js中響應式的原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

關于Vue.js

Vue.js是一款MVVM框架,上手快速簡單易用,通過響應式在修改數據的時候更新視圖。Vue.js的響應式原理依賴于Object.defineProperty,尤大大在Vue.js文檔中就已經提到過,這也是Vue.js不支持E8  以及更低版本瀏覽器的原因。Vue通過設定對象屬性的 setter/getter  方法來監聽數據的變化,通過getter進行依賴收集,而每個setter方法就是一個觀察者,在數據變更的時候通知訂閱者更新視圖。

將數據data變成可觀察(observable)的

那么Vue是如何將所有data下面的所有屬性變成可觀察的(observable)呢?

function observer(value) {     Object.keys(value).forEach((key) => defineReactive(value, key, value[key] , cb)) }  function defineReactive (obj, key, val, cb) {     Object.defineProperty(obj, key, {         enumerable: true,         configurable: true,         get: ()=>{             /*....依賴收集等....*/         },         set:newVal=> {             cb();/*訂閱者收到消息的回調*/         }     }) }  class Vue {     constructor(options) {         this._data = options.data;         observer(this._data, options.render)     } }  let app = new Vue({     el: '#app',     data: {         text: 'text',         text2: 'text2'     },     render(){         console.log("render");     } })

為了便于理解,首先考慮一種最簡單的情況,不考慮數組等情況,代碼如上所示。在initData中會調用observe這個函數將Vue的數據設置成observable的。當_data數據發生改變的時候就會觸發set,對訂閱者進行回調(在這里是render)。

那么問題來了,需要對app._date.text操作才會觸發set。為了偷懶,我們需要一種方便的方法通過app.text直接設置就能觸發set對視圖進行重繪。那么就需要用到代理。

代理

我們可以在Vue的構造函數constructor中為data執行一個代理proxy。這樣我們就把data上面的屬性代理到了vm實例上。

_proxy(options.data);/*構造函數中*/  /*代理*/ function _proxy (data) {     const that = this;     Object.keys(data).forEach(key => {         Object.defineProperty(that, key, {             configurable: true,             enumerable: true,             get: function proxyGetter () {                 return that._data[key];             },             set: function proxySetter (val) {                 that._data[key] = val;             }         })     }); }

看完上述內容,你們對Vue.js中響應式的原理是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鸡西市| 海伦市| 鹰潭市| 康马县| 大姚县| 湘乡市| 阳曲县| 迁西县| 公安县| 长白| 平江县| 云霄县| 革吉县| 根河市| 绿春县| 油尖旺区| 巨野县| 昭平县| 嘉义市| 化隆| 子洲县| 肇东市| 宁城县| 大宁县| 佳木斯市| 闵行区| 积石山| 洱源县| 长顺县| 湄潭县| 滁州市| 营口市| 金沙县| 宁国市| 新晃| 衡南县| 大港区| 铜梁县| 马鞍山市| 平罗县| 闸北区|