Javascript ReactJS:如何在数组状态下添加新元素并保留;prevState“;为了他们?

Javascript ReactJS:如何在数组状态下添加新元素并保留;prevState“;为了他们?,javascript,reactjs,Javascript,Reactjs,我的数组状态是渲染,我可以毫无问题地推送新元素,但是,当我尝试添加特定索引时,react正在更改以前元素的状态。 前一状态的示例: {this.state.numOfRows.map((v, k) => ( <Item add={this.add.bind(this)} key={`item-${k}`} index={k} item={v} /> ))} {this.state.numorrows.map((v,k)=>( ))} 这将呈现选项为0的html元素;

我的数组状态是渲染,我可以毫无问题地推送新元素,但是,当我尝试添加特定索引时,react正在更改以前元素的状态。 前一状态的示例:

{this.state.numOfRows.map((v, k) => (
    <Item add={this.add.bind(this)} key={`item-${k}`} index={k} item={v} />
))}
{this.state.numorrows.map((v,k)=>(
))}
这将呈现选项为0的html元素; 所以,当我调用这个.add(index)prop时,我可以在数组中再添加2到3个元素,并更改1和2的选项。 但是,当我调用this.add(index)在索引2中添加新元素时,例如,我之前选择的选项将被更新,并且在最后一个索引中显示包含0的新元素选项


在React中呈现列表时,应指定一个基于所呈现项的唯一标识的
键,而不是该项在源数组中的(当前)索引/位置

在您的情况下,如果
numorrows
数组中的每个项都有一个唯一的标识符(即
someUniqueId
,如下所示),那么这将是一个更好的候选项,可以与呈现的每个
道具一起使用:

{
  this.state.numOfRows.map((v, k) => 
      (<Item add={this.add.bind(this)} 
             key={`item-${ v.someUniqueId }`} 
             index={k} 
             item={v} />))
} 
{
this.state.numorrows.map((v,k)=>
())
} 
原因是React确定是否需要根据呈现列表中的项目
更新该项目。当项目的
(基于其索引)保持不变时(尽管该项目的实际数据发生变化),渲染异常将出现

有关这方面的更多信息,请参阅React的文档


另外,请参见这一点,特别是。

您的问题是您正在使用
键的数组索引。Instaed使用更具体的东西,如数据库中的唯一id。第二个问题是如何添加项目。在数组副本上使用
splice
在索引
arr.splice(idx,0,item)处进行突变/插入
谢谢@JohnRuddell。现在可以了!