【发布时间】:2017-10-04 12:27:36
【问题描述】:
我有一个对象数组,格式如下:
{
"_id": "590cbcd9bf2b9b18ab3c3112",
"title": "",
"content": "Create Notes Webapp",
"checked": true,
"listID": "590cbc61bf2b9b18ab3c3110"
},
{
"_id": "590cfe5a86fe0908c560c2b0",
"title": "A Note 01",
"content": "My first note.",
"checked": false,
"listID": "590cbe15bf2b9b18ab3c3114"
}
这是我必须更新每个项目的代码:
onTextChange = (key, note, value) => {
clearTimeout(timeoutID);
switch (key) {
default:
break;
case 'title':
note.title = value;
break;
case 'checked':
note.checked = value;
break;
case 'content':
note.content = value;
break;
}
var notes = this.state.notes;
var id;
for (var i in notes) {
if (notes[i]._id === note._id) {
notes[i] = note;
id = i;
break;
}
}
this.setState({ notes }, () => { timeoutID = setTimeout(() => this.updateNote(this.state.notes[id]), 3000); });
}
这是这样称呼的:
onChange={(e, value) => this.onTextChange('title', note, value)}
有没有比使用 switch 语句更新对象中的指定项更好的方法?另外,有没有比 for 循环更简单的方法来扫描数组中的 id?
【问题讨论】:
-
为什么要使用settimeout?如果你想在 setState 完成后运行代码:
setState({notes}, ()=>{//your code}) -
其实很好。我忘了我应该在 setState 回调上设置计时器
标签: javascript arrays reactjs javascript-objects dom-events