我是Vue的新手。在制作这个组件的过程中,我在这里遇到了困难。
我使用以下代码向API发出AJAX请求,该API返回一个数组:
<script> import axios from 'axios'; export default { data() { return { tickets: [], }; }, methods: { getTickets() { axios.get(url) .then((response) => { console.log(response.data) //[{}, {}, {}] this.tickets = [...response.data] console.log(this.tickets) //proxy object }) }, }, created() { this.getTickets(); } }; </script>
问题是,this.tickets
被设置为一个Proxy
对象,而不是我从API获取的Array
。
我在这里做错了什么?
P粉0716263642023-09-17 16:44:31
如果您想要响应式信息,请使用 toRaw https://vuejs.org/api/reactivity-advanced.html#toraw
const foo = {} const reactiveFoo = reactive(foo) console.log(toRaw(reactiveFoo) === foo) // true
或者如果您不想要 ref 包装器包围您的信息,请使用 unref
https://vuejs.org/api/reactivity-utilities.html#unref
P粉2037924682023-09-17 12:47:42
像您的票务等数据中的项目被转换为可观察对象。这是为了实现响应性(自动重新渲染UI和其他功能)。这是预期的,返回的对象应该像数组一样工作。
查看响应性文档,因为您需要以特定的模式与数组交互,否则它不会在UI上更新:https://v3.vuejs.org/guide/reactivity-fundamentals.html
如果您不想要响应性 - 也许您从不在客户端更新票务,只想显示它们 - 您可以在response.data上使用Object.freeze()方法。