gpt4 book ai didi

reactjs - 删除项目后 react 列表渲染错误数据

转载 作者:行者123 更新时间:2023-12-03 13:23:09 25 4
gpt4 key购买 nike

我有一个简单的学生对象列表,其中包含姓名及其所在州的分数。

他们的名字绑定(bind)到<b>{student.name}</b>他们的分数必然是

<input type="text" defaultValue={student.score}/>

每当我想从此列表中删除第一个学生并且通过调用 set state 重新渲染组件。

第二个学生的输入标记显示第一个学生的分数,而不是拥有自己的分数。为什么我做错了会发生这种情况??

Here is my code 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"));

最佳答案

这是因为您使用的是 key={index} 而不是学生独有的值。

当数组被修改时,删除索引后的学生将拥有错误的键,React 将不会注册键更改以使用更新的数据重新渲染。

你应该使用这样的东西......

<div key={student.name}>

假设student.name是唯一的。

关于reactjs - 删除项目后 react 列表渲染错误数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43642351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com