javascript - 修改数据时正在修改道具?
问题描述
请看下面的 vue/nuxt 组件示例:
<template>
<my-component v-model="selected" :options="options" />
</template>
<script>
export default {
props: {
currentSelected: Array,
options: Array
},
data() {
return {
selected: this.currentSelected
}
}
}
</script>
当my-component 更新'selected'时,prop 也正在更新,并且正在更新父组件中的数据。
这是正常行为吗?如果是(或不是),为什么会发生这种情况?
解决方案
这是正常行为。在 Javascript 中,您可以将对象和数组视为引用。
这意味着如果您编写以下代码:
let obj = { foo: 'bar' }
let other = obj
other.foo = 'meh'
那么,obj.foo
将等于'meh'
。
如果要将数组克隆到组件中并避免这种行为,则需要将数组中的所有值复制到 props.xml 中。为此,您可以使用以下内容:
export default {
props: {
currentSelected: Array,
options: Array
},
data() {
return {
selected: JSON.parse(JSON.stringify(this.currentSelected))
}
}
}
这将允许您选择的变量丢失对您的 currentSelected 道具的所有引用。
推荐阅读
- javascript - Material ui DatePicker 仅启用年份
- c - read() 系统调用将实际读取的数据量
- pyspark - 创建 spark DataFrame 时 JSC 为空
- r - 在 R 中使用 t.test() 时出错 - 'x' 观察值不足
- c++ - 改变非常量指针赋值给常量指针的效果
- java - 将 2 个数组与所有项目进行比较
- php - PHP中的会话变量,一个数字,传递给另一个PHP脚本不起作用
- javascript - 从 chrome 应用程序中启动第三方 chrome 打包应用程序
- ios - 字典对象数组在 Swift 中发送到 firebase 云函数后发生变化?
- android - 应用关闭后启动带有警报的服务