我是一名有用的助手,可以为您翻译文本。
我有一个简单的学生对象列表,其中包含姓名和他们在州内的分数。
他们的姓名绑定到
每当我想要从这个列表中删除第一个学生并通过调用set state重新呈现组件时。
第二个学生的输入标记显示第一个学生的分数,而不是拥有自己的分数。为什么会发生这种情况,我做错了什么?? 这是我的代码jsbin
我有一个简单的学生对象列表,其中包含姓名和他们在州内的分数。
他们的姓名绑定到
<b>{student.name}</b>
,他们的分数也同样绑定。<input type="text" defaultValue={student.score}/>
每当我想要从这个列表中删除第一个学生并通过调用set state重新呈现组件时。
第二个学生的输入标记显示第一个学生的分数,而不是拥有自己的分数。为什么会发生这种情况,我做错了什么?? 这是我的代码jsbin
class App extends React.Component{
constructor(){
super();
this.state ={
students:[{name:"A",score:10},{name:"B",score:20},{name:"C",score:30}]
}
}
onDelete(index){
this.state.students.splice(index,1);
this.setState(this.state);
}
render(){
return(
<div>
{this.state.students.map((student,index)=>{
return(
<div key={index}>
<b>{student.name}</b> - <input type="text" defaultValue={student.score}/>
<button onClick={this.onDelete.bind(this,index)}>delete</button>
</div>
)
})}
</div>
)
}
}
ReactDOM.render(<App/>,document.getElementById("main"));
input
标签(如span
)或其他输入类型,还有其他标签吗? - BradBytedefaultValue
改变时,它不会更新...你需要丢弃该元素并重新生成它(即更改key
)...而另一个元素可能会正常工作。如果你使用了value
,它可能会起作用...但是除非你给它一个onChange
处理程序,否则你只能拥有一个只读输入。 - BradByte