我正在使用复选框中选中的对象创建新数组。但是,当我再次提交时,出现错误“ flattenChildren(...):遇到两个具有相同密钥.$3
的孩子。孩子密钥必须是唯一的;当两个孩子共享一个密钥时,只有第一个孩子会是用过的。”我只想推送唯一的对象。
我正在使用反应
handleSubmit(){
let students = []
for(let idx in this.state.checked){
if(this.state.checked[idx] ){
students.push(this.state.allStudent[idx])
}
}
console.log('students', students)
this.setState({
studentList: update(this.state.studentList, {$push: students})
})
}
答案 0 :(得分:3)
使用React时,您应该能够安全地使用ES6设置对象,该对象可以存储任何类型的唯一值。 (https://devdocs.io/javascript/global_objects/set)。
例如
handleSubmit(){
let students = []
for(let idx in this.state.checked){
if(this.state.checked[idx] ){
students.push(this.state.allStudent[idx])
}
}
students = [...new Set(students)];
console.log('students', students)
this.setState({
studentList: update(this.state.studentList, {$push: students})
})
}
答案 1 :(得分:1)
我不是React.js的专家,但这似乎是一个简单的问题(仅将唯一元素推入JS数组)。修改如下的函数应该可以工作:
handleSubmit(){
let students = [...this.state.studentList];
for(let idx in this.state.checked){
if(this.state.checked[idx] && (students.indexOf(this.state.checked[idx]) === -1)){
students.push(this.state.allStudent[idx])
}
}
console.log('students', students)
this.setState({
studentList: update(this.state.studentList, students)
})
}
我们在这里所做的基本上是在'students'数组上使用'indexOf()'方法来检查当前元素是否存在于数组中-如果在数组中未找到元素,indexOf()方法将返回-1。数组。希望这会有所帮助!