Vue 3中控制台中的Proxy是什么意思?
What does Proxy mean in the console in Vue 3?
我正在打乱一个数组并在控制台中收到一条奇怪的消息。
我的 JSON 文件如下所示:
[
{
"id": 1,
"name": "Sushi",
"image": "https://images.pexels.com/photos/1640777/pexels-photo-1640777.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500",
"price": 7.99,
"restaurant": "Sushi Garden",
"city": "Burnaby",
"googleMap": "https://www.google.com",
"keywords": "Lorem ipsum",
"onlineOrders": {
"foodly": "https://www.google.com",
"doorDash": "https://www.daum.net",
"skipTheDish": "https://www.naver.com"
}
},
{
"id": 2,
"name": "Noodle",
"image": "https://images.pexels.com/photos/1640777/pexels-photo-1640777.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500",
"price": 7.99,
"restaurant": "Restaurant Name",
"city": "Burnaby",
"googleMap": "https://www.google.com",
"keywords": "Lorem ipsum",
"onlineOrders": {
"foodly": "https://www.google.com"
}
},
...
这是我用来打乱食物对象数组的组件。
import foods from "/json/foods.json";
import _ from "lodash";
...
created: function () {
this.retrievedFoods = foods;
this.randomizeFoodsOrder();
},
data() {
return {
retrievedFoods: [],
};
},
methods: {
randomizeFoodsOrder() {
let temp = foods;
console.log(temp); // Array
this.retrievedFoods = _.shuffle(temp);
console.log(this.retrievedFoods); // Proxy????
},
...
但是,我在改组后在控制台日志中得到了这个 Proxy
东西。
这可能是什么问题?什么将此更改为代理?
TLDR:控制台仍然显示预期值,您仍然与变量交互,就好像它没有说 Proxy。
proxy 是一项强大的 JavaScript ES6 功能,它允许您拦截与目标对象的任何交互并执行自定义行为。如果您熟悉事件监听器,您可以将代理视为一种用于对象交互的事件监听器。
Vue 3 guide on reactivity 对代理的解释如下:
a Proxy is an object that encases another object or function and allows you to intercept it.
代理是隐蔽的“包装”对象,它不仅可以拦截 write 事件到目标(即对象 mutations/changes),甚至 read 事件(即仅读取 属性 值)。此功能是 Vue 3 通过使用代理来跟踪数据更改和触发更新来实现对 reactive
变量的反应性的方式。 (在 Vue 2 中,这是用 getters and setters 完成的。)
所有代理在控制台中都有 Proxy 标签,让您知道记录的对象有代理拦截它。然后您可以在控制台中单击以展开代理以查看它在做什么。可以在代理的 [[Target]]
属性.
中找到目标对象
那么,这对您在 Vue 3 中与响应式对象交互的方式有何改变?不多。您仍然可以像没有代理一样与目标对象交互,没有特殊的语法。
我正在打乱一个数组并在控制台中收到一条奇怪的消息。
我的 JSON 文件如下所示:
[
{
"id": 1,
"name": "Sushi",
"image": "https://images.pexels.com/photos/1640777/pexels-photo-1640777.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500",
"price": 7.99,
"restaurant": "Sushi Garden",
"city": "Burnaby",
"googleMap": "https://www.google.com",
"keywords": "Lorem ipsum",
"onlineOrders": {
"foodly": "https://www.google.com",
"doorDash": "https://www.daum.net",
"skipTheDish": "https://www.naver.com"
}
},
{
"id": 2,
"name": "Noodle",
"image": "https://images.pexels.com/photos/1640777/pexels-photo-1640777.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500",
"price": 7.99,
"restaurant": "Restaurant Name",
"city": "Burnaby",
"googleMap": "https://www.google.com",
"keywords": "Lorem ipsum",
"onlineOrders": {
"foodly": "https://www.google.com"
}
},
...
这是我用来打乱食物对象数组的组件。
import foods from "/json/foods.json";
import _ from "lodash";
...
created: function () {
this.retrievedFoods = foods;
this.randomizeFoodsOrder();
},
data() {
return {
retrievedFoods: [],
};
},
methods: {
randomizeFoodsOrder() {
let temp = foods;
console.log(temp); // Array
this.retrievedFoods = _.shuffle(temp);
console.log(this.retrievedFoods); // Proxy????
},
...
但是,我在改组后在控制台日志中得到了这个 Proxy
东西。
这可能是什么问题?什么将此更改为代理?
TLDR:控制台仍然显示预期值,您仍然与变量交互,就好像它没有说 Proxy。
proxy 是一项强大的 JavaScript ES6 功能,它允许您拦截与目标对象的任何交互并执行自定义行为。如果您熟悉事件监听器,您可以将代理视为一种用于对象交互的事件监听器。
Vue 3 guide on reactivity 对代理的解释如下:
a Proxy is an object that encases another object or function and allows you to intercept it.
代理是隐蔽的“包装”对象,它不仅可以拦截 write 事件到目标(即对象 mutations/changes),甚至 read 事件(即仅读取 属性 值)。此功能是 Vue 3 通过使用代理来跟踪数据更改和触发更新来实现对 reactive
变量的反应性的方式。 (在 Vue 2 中,这是用 getters and setters 完成的。)
所有代理在控制台中都有 Proxy 标签,让您知道记录的对象有代理拦截它。然后您可以在控制台中单击以展开代理以查看它在做什么。可以在代理的 [[Target]]
属性.
那么,这对您在 Vue 3 中与响应式对象交互的方式有何改变?不多。您仍然可以像没有代理一样与目标对象交互,没有特殊的语法。