vue.js - Vue:完全替换数据对象?
问题描述
我知道如果我想向数据对象添加属性,我会使用Vue.set()
. 我在我的created()
生命周期方法中这样做了......一个新字段将添加到myObject
. 但是,如果我想进行 api 调用并完全替换现有的数据对象myObject
呢?我可以做我正在做的事情updateMore()
还是有另一种方法来处理这个?
data() {
return {
myObject: {}
}
},
async created() {
let apiData = await axios.get('http://myurl.com');
this.$set(this.myObject, 'name', apiData.name);
},
methods: {
updateMore() {
let moreAPIData = await axios.get('http://myurl.com');
// will this completely override `myObject` with `moreAPIData` and still be reactive?
this.myObject = moreAPIData;
}
}
解决方案
TL;博士:
这个新对象的分配很好。当您向对象添加新键时,会出现 Vue 反应性问题,因为对象是相同的,改变的是它的内容。Javascript通过地址比较对象,所以如果我这样做
new MyClass() === new MyClass()
它返回 false,因为即使它们具有相同的内容,它们也具有不同的地址。
总而言之,当你设置一个全新的对象时,Vue 能够跟踪差异,但当你更改一个键的内容时,它就不能。
无聊的全文
您可以在此处阅读有关 Vue 反应性的完整文档
推荐阅读
- php - 如何在 foreach 循环中使用对象并替换变量 (OOP)?
- python - 使用 Pandas 数据框中的 Plotly 绘制分组条形图
- matlab - cd 错误 - 文件路径不是字符向量 Matlab
- php - 如何通过迁移在 laravel 5.7 中创建非空列?
- android-studio - 在一台 PC 上制作应用程序并使用另一台 PC 发布
- python - 反转字符串 Python
- android - 当回收站视图中的第一个项目不可见但在第一个项目可见时隐藏时,如何在滚动时显示我的工厂?
- javascript - 我想用 javascript 为文本着色
- iis - 如何从状态码 500 页面中删除内部服务器错误短语?
- python - 对python非常陌生,想问如何使用while语句使这个无限重复: