VueJS, an endless loop of object creation and Error: "Maximum call stack size exceeded"
VueJS, an endless loop of object creation and Error: "Maximum call stack size exceeded"
上次我问了一个类似但更复杂的问题。在这里我想问一个具体的问题。
有一个接受对象作为输入的函数:
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.
作为子元素
新元素添加正确
新的子元素被正确添加到预先写入的数据中。
但是当尝试向新创建的元素添加子元素时,出现死循环并发生错误。该函数开始无休止地创建对象的副本。
我做错了什么?
好的,我是这样解决的:
onFormSubmit (data) {
let newId = Math.floor(Math.random() * 100) + data.leader
let newObj = {}
newObj = {
...data,
id: newId
}
if (!data.leader) {
this.list.push(newObj)
this.saveList()
} else {
for (let i = 0; i < this.list.length; i++) {
if (this.list[i].id === newObj.leader) {
this.list[i].children = [newObj]
this.saveList()
}
}
}
},
上次我问了一个类似但更复杂的问题。在这里我想问一个具体的问题。
有一个接受对象作为输入的函数:
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.
新元素添加正确
新的子元素被正确添加到预先写入的数据中。
但是当尝试向新创建的元素添加子元素时,出现死循环并发生错误。该函数开始无休止地创建对象的副本。
我做错了什么?
好的,我是这样解决的:
onFormSubmit (data) {
let newId = Math.floor(Math.random() * 100) + data.leader
let newObj = {}
newObj = {
...data,
id: newId
}
if (!data.leader) {
this.list.push(newObj)
this.saveList()
} else {
for (let i = 0; i < this.list.length; i++) {
if (this.list[i].id === newObj.leader) {
this.list[i].children = [newObj]
this.saveList()
}
}
}
},