vue.js - 通过扩展运算符奇怪的行为创建的对象
问题描述
我正在使用 Vue.js 扩展运算符来创建一个新数组并在其中找到一个将分配给selectedEmployee
data 属性的值:
selectEmployee(id) {
const employees = [...this.employees];
this.selectedEmployee = employees.find(employee => employee.id === id);
},
无论哪种方式,selectedEmployee
通过修改值v-model
也会修改保存在paginatedEmployees
属性中的记录,该属性定义如下:
async fetchEmployees() {
this.loading = true;
try {
const response = await axios.get('/api/employees');
this.employees = response.data.employees;
this.paginatedEmployees = _.chunk(this.employees, 10);
this.pages = this.paginatedEmployees.length;
} catch (e) {
this.error = true;
this.requestMessage = e.message;
} finally {
this.loading = false;
}
},
知道为什么会这样吗?
解决方案
传播制作了一个浅拷贝,这意味着您有一个由相同员工组成的新数组。
您可能想要制作所选员工的副本,这样您就不会改变原始员工。
请记住,这也是一个浅拷贝,因此如果您的员工有嵌套对象,这些对象仍将引用原始对象,就像在您的数组场景中一样。这就是传播如此便宜的操作而不是深度复制/克隆的原因。
推荐阅读
- sql - 在 postgresql 表中查找利润更高的用户
- maven - Maven - 获取所有测试的列表而不运行它们?
- javascript - jquery keyup/keydown 触发器在没有控制台错误的数据表中不起作用
- c++ - Gstreamer 动态更改源元素
- amazon-web-services - 将 filebeat 添加到 ebextensions 以及使用 AWS Code Pipelines 创建的 war 文件
- python - 所有键都在字典python中被选中
- javascript - Kendo UI ToolTip on Icon
- c# - 创建 LINQ 查询对象
- c - C:为什么静态变量不能像全局变量一样在外部链接
- bash - 使用 tee 记录每个异常以重新生成 bash 脚本