В прошлый раз я задал похожий, но более сложный вопрос. Здесь я хочу спросить об одной конкретной проблеме.
Есть функция, которая принимает объект в качестве входных данных:
onFormSubmit (data) {
const newObj = {
...data,
id: Math.random()
}
if (!data.leader) {
this.list.push(newObj)
this.saveList()
} else {
for (let i = 0; i < this.list.length; i++) {
if (this.list[i].id === data.leader) {
this.list[i].children.push(newObj)
this.saveList()
}
}
}
}
saveList () {
const parsed = JSON.stringify(this.list)
localStorage.setItem('list', parsed)
}
Вход:
{leader: 42, name: "Name", number: "12345", id: "", children: Array(0)}
Структура данных:
data: () => ({
list: [{
leader: '',
name: 'Silvia',
number: +54321236576,
id: 17,
children: [{
leader: 17,
name: 'Joe',
number: +87653459809,
id: 191,
children: []
}]
},
{
leader: '',
name: 'Victor',
number: +98765434560,
id: 42,
children: [{
leader: 42,
name: 'Sam',
number: +145735643798,
id: 202,
children: [{
leader: 202,
name: 'Mona',
number: +77774352309,
id: 2092
}]
}]
}]
}),
Задача функции - добавить этот объект в массив объектов, на верхний уровень, если !data.leader = true
, или как дочерний элемент, если !data.leader = false.
Новый элемент добавлен правильно.
Новый дочерний элемент правильно добавлен к предварительно записанным данным.
Но при попытке добавить потомка к вновь созданному элементу возникает бесконечный цикл и возникает ошибка. Функция начинает бесконечно создавать копию объекта.
Что я делаю не так?
computed
, большую часть времени бесконечные циклы происходят из рекурсивного вызова в вычисленных свойствах. - person Millennium Fennec   schedule 27.01.2021