加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactjs – 删除项目后反应列表呈现错误数据

发布时间:2020-12-15 05:05:59 所属栏目:百科 来源:网络整理
导读:我有一个简单的学生对象列表,其中包含姓名和状态分数. 他们的名字绑定到 b {student.name} / b他们的分数必然会 input type="text" defaultValue={student.score}/ 什么时候我想从这个列表中删除第一个学生 通过调用set state重新呈现组件 第二个学生的输入
我有一个简单的学生对象列表,其中包含姓名和状态分数.

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

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

什么时候我想从这个列表中删除第一个学生
通过调用set state重新呈现组件

第二个学生的输入标签显示第一个学生的分数而不是自己的分数.为什么这会发生在我做错的地方?

这是我的代码here is mycode in 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是唯一的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读