proxy 是 ES6 中的一個新特性,在 Vue 2.0 中也被廣泛應用。在 Vue 中,proxy 主要用于監(jiān)聽響應式數(shù)據(jù)的變化,當數(shù)據(jù)發(fā)生變化時,proxy 會自動觸發(fā)更新視圖。
要理解 Vue 2.0 中的 proxy,首先要了解什么是響應式數(shù)據(jù)。簡單來說,響應式數(shù)據(jù)就是會自動觸發(fā)更新的數(shù)據(jù)。在 Vue 中,我們可以使用new Vue({ data: {...} })
來創(chuàng)建響應式數(shù)據(jù)。
當我們使用 Vue 創(chuàng)建響應式數(shù)據(jù)時,Vue 會自動使用 proxy 來監(jiān)聽數(shù)據(jù)的變化。當數(shù)據(jù)改變時,Vue 會自動觸發(fā)更新視圖。
// 創(chuàng)建響應式數(shù)據(jù)
var obj = { foo: 'bar' };
var vue = new Vue({ data: obj });
// 監(jiān)聽數(shù)據(jù)變化
obj.foo = 'baz'; // 觸發(fā)更新視圖
上面的代碼創(chuàng)建了一個響應式數(shù)據(jù),然后修改了數(shù)據(jù)的值,Vue 會自動觸發(fā)更新視圖。
除了使用new Vue({ data: {...} })
創(chuàng)建響應式數(shù)據(jù)外,我們也可以使用 Vue 提供的響應式 API,來手動創(chuàng)建響應式數(shù)據(jù)。
// 手動創(chuàng)建響應式數(shù)據(jù)
var data = { foo: 'bar' };
var reactiveData = Vue.observable(data);
// 監(jiān)聽數(shù)據(jù)變化
reactiveData.foo = 'baz'; // 觸發(fā)更新視圖
上面的代碼手動創(chuàng)建了一個響應式數(shù)據(jù),然后修改了數(shù)據(jù)的值,Vue 會自動觸發(fā)更新視圖。
使用 proxy 監(jiān)聽響應式數(shù)據(jù)變化是 Vue 2.0 中的一個新特性。在早期版本的 Vue 中,Vue 使用了 Object.defineProperty 來監(jiān)聽數(shù)據(jù)變化。而在 2.0 中,Vue 使用了更優(yōu)秀的監(jiān)聽方式:proxy。
// 使用 Object.defineProperty 監(jiān)聽數(shù)據(jù)變化
var obj = { foo: 'bar' };
vue.$data = obj;
Object.defineProperty(obj, 'foo', {
get: function() { return this._foo },
set: function(newVal) {
this._foo = newVal;
vue.$forceUpdate();
}
});
obj.foo = 'baz'; // 觸發(fā)更新視圖
上面的代碼使用了 Object.defineProperty 監(jiān)聽數(shù)據(jù)變化,當數(shù)據(jù)變化時,需要手動觸發(fā)更新視圖。而聰明的 Vue 開發(fā)者在 2.0 中,使用了更優(yōu)秀的監(jiān)聽方式——proxy。
至此,我們已經(jīng)了解了 Vue 2.0 中 proxy 的相關(guān)知識。