javascript - 代理在 Vue 3 的控制台中是什么意思?

标签 javascript vue.js proxy lodash vuejs3

我正在改组一个数组并在控制台中收到一条奇怪的消息。
我的 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洗牌后控制台日志上的东西。
enter image description here
这里可能是什么问题?是什么将其更改为代理?

最佳答案

TLDR:控制台仍然显示预期值,并且您仍然与变量交互,就像它没有说代理一样。

一个 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.


代理是隐蔽的“包装”对象,它不仅可以拦截向目标写入事件(即对象突变/更改),还可以拦截读取事件(即仅读取属性值)。这种能力是 Vue 3 在 reactive 上实现 react 性的方式。变量,通过使用代理来跟踪数据更改和触发更新。 (在 Vue 2 中,这是通过 getterssetters 完成的。)
所有代理在控制台中都有 Proxy 标签,让您知道记录的对象有一个代理拦截它。然后,您可以在控制台中单击以展开代理以查看它在做什么。目标对象可以在代理的[[Target]]中找到属性(property)。
那么这一切对您在 Vue 3 中与响应式对象交互的方式有什么改变呢?不多。您仍然与目标对象进行交互,就像它没有代理一样,没有特殊的语法。

关于javascript - 代理在 Vue 3 的控制台中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64960637/

相关文章:

每次页面重新启动时,Firebase.auth().currentUser 都会变为 null

后端的 Angular-CLI 代理不起作用

javascript - 如何绕过 net::ERR_FAILED 200

javascript - Jasmine 的 spy throw 不是函数错误

java - 使用 jquery 调用 java 服务器端方法

javascript - 如何从 TestCafe 选择器中提取底层 HTML dom 元素?

javascript - 延迟加载由 javascript/leaflet 中的appendChild() 附加的图像

vue.js - Vue - 如何为表行更改设置动画

javascript - Vue.js:如何在 .vue 模板文件内的 vue 方法中设置数据变量

android - 无法在 Ubuntu 12.10 上为 Android SDK Manager 设置代理