Javascript 警告:列表中的每个子项都应具有唯一的;“关键”;提案。-反应
我正在用ReactJS构建一个看板应用程序,用户可以在三个不同的“列”(TODO、Onprogress和Done)中添加一张“卡片”。我遇到的问题是,卡片中应该显示的内容没有按应有的方式显示,尽管我的状态返回的对象很好(当我console.log所有内容时)。我认为问题在于,我将一个对象推入数组,然后将其作为值添加到状态中的一个键中,因此,当我使用道具传递数据时,无法正确读取数据。我将在下面分享我的所有代码库 这是我的应用程序组件:Javascript 警告:列表中的每个子项都应具有唯一的;“关键”;提案。-反应,javascript,arrays,reactjs,javascript-objects,Javascript,Arrays,Reactjs,Javascript Objects,我正在用ReactJS构建一个看板应用程序,用户可以在三个不同的“列”(TODO、Onprogress和Done)中添加一张“卡片”。我遇到的问题是,卡片中应该显示的内容没有按应有的方式显示,尽管我的状态返回的对象很好(当我console.log所有内容时)。我认为问题在于,我将一个对象推入数组,然后将其作为值添加到状态中的一个键中,因此,当我使用道具传递数据时,无法正确读取数据。我将在下面分享我的所有代码库 这是我的应用程序组件: import React,{Component}来自'Rea
import React,{Component}来自'React';
从“./列”导入列;
从“/AddCardForm”导入AddCardForm;
导入“/App.css”;
类应用程序扩展组件{
建造师(道具){
超级(道具)
此.state={
栏目:[
{
名称:“待办事项”,
卡片:[]
},
{
名称:“Onprogress”,
卡片:[]
},
{
名称:“完成”,
卡片:[]
},
]
};
};
//componentDidMount(){
//const{coldata}=this.state.columns
//console.log(coldata);
////this.ref=base.syncState();
// }
addCard=(卡,其他状态)=>{
console.log(“添加卡”);
const cards={…this.state.columns.cards};
卡片[`card`]=卡片;
让todosCards=[]
让onprogressCards=[]
让doneCards=[]
Object.values(otherStatus).map(function(value){
if(value.includes('Onprogress')&&value.includes('Done')){
todosCards.推送(卡片)
}else if(value.includes('Todos')&&value.includes('Done')){
打开卡片。推(卡片);
}else if(value.includes('Todos')&&value.includes('Onprogress')){
doneCards.推送(卡片);
}
返回(ToDoCards | | onprogressCards | | doneCards);
});
控制台日志(todosCards);
控制台日志(在进程卡上);
控制台日志(doneCards);
这是我的国家({
栏目:[
{
名称:“待办事项”,
卡片:托德斯卡
},
{
名称:“Onprogress”,
卡片:onprogressCards
},
{
名称:“完成”,
卡片:doneCards
},
]
});
}
render(){
返回(
{Object.keys(this.state.columns).map(key=>(
))}
);
}
}
导出默认应用程序代码>来自react文档:
键有助于识别哪些项已更改、已添加或已删除。应为数组中的元素提供键,以使元素具有稳定的标识
因此,从本质上讲,如果要将数组映射到组件,那么对每个组件(映射的组件)使用唯一键将确保仅在必要时重新渲染这些组件
请按照下面的说明进行操作,您将了解警告想要深入告诉您的内容。无论您在何处使用循环来构建react组件,您都必须添加prop键并向其传递唯一值
您可以重新定义map
调用以包含如下索引:
Object.keys(this.state.columns).map((count,key)=>(
))
首先阅读键的工作原理以及需要它的原因