#javascript #vue.js
#javascript #vue.js
Вопрос:
В моем компоненте Vue у меня есть массив (объектов) prop selectedSuppliers
. Я хочу инициализировать реквизит данных, вызываемый suppliers
selectedSuppliers
, но любые последующие изменения suppliers
не должны распространяться на selectedSuppliers
.
Я попробовал следующее
props: {
selectedSuppliers: {
type: Array,
required: true
},
},
data () {
return {
selected: [...this.selectedSuppliers],
}
}
Но это не работает. Каков правильный способ инициализации свойства данных массива для array prop?
Ответ №1:
Если selectedSuppliers
это массив объектов, то оператор распространения выполняет только поверхностную копию этого массива. Это означает, что обновление любого объекта suppliers
будет обновлять содержимое selectedSuppliers
.
Вы можете взглянуть на этот короткий пост.
Комментарии:
1. все в порядке, мне просто нужно клонировать массив
2. Это моя точка зрения, вы на самом деле не клонируете массив с помощью оператора spread . Вы просто создаете новый массив с теми же объектами (с той же ссылкой).
3. да, это то, что я хочу: другой массив, одни и те же объекты
4. Хорошо, так что я не понимаю вашей проблемы. Что вы подразумеваете под «это не работает»? Какие-то ошибки в консоли?
5. Ошибок нет, но для реквизита данных установлен пустой массив, когда реквизит компонента представляет собой массив с одним элементом
Ответ №2:
Это может сработать,
props: {
selectedSuppliers: {
type: Array,
required: true
},
},
data () {
return {
selected: this.selectedSuppliers.map(o => Object.assign({}, o)
}
}