非标记返回时不带键的地图

时间:2018-11-18 17:07:22

标签: javascript reactjs

例如,如果我有此代码段,如何在不出现以下错误的情况下进行映射?

  

数组或迭代器中的每个子代都应具有唯一的“键”属性。

with cte
  as (select row_number() over(partition by sale_id order by sale_id) as rnk
            ,*
       from [dbo].[FactGunSales]
      )
delete
  from cte 
where rnk <> 1

4 个答案:

答案 0 :(得分:0)

在反应中它将查找键属性。为了解决您的问题,最好是将UI中的key属性绑定并相应地映射数组对象,然后您可以按照其映射数据,而不仅仅是从Student中选择值。

如果我们的学生对象没有唯一属性,则可以使用Symbol或使用诸如cuid的某些节点模块来生成唯一键。

答案 1 :(得分:0)

您应该添加一个关键属性:

this.setState({
    campus: e.target.value.map(school => {value: school.value, key: school.id})
  });

答案 2 :(得分:0)

我相信您是否正在使用e.target.value,因此您希望它已经是要映射的数组(因为.map()是数组方法)?

我认为不可能从e.target.value获取数组,但是无论如何,您在React官方文档中都有答案,这是关于可以使用默认项目索引作为键:

const todoItems = todos.map((todo, index) =>
  <li key={index}>
    {todo.text}
  </li>
);

答案 3 :(得分:0)

您可以使用索引并将其设置为键,因为array.map具有第二个可选参数作为索引,这将是唯一的。[注意:如果您没有索引,请使用此参数id或唯一的东西]

由于在反应中您需要具有键属性,所以这不是错误,而是警告。

键通常有助于确定哪个元素已更新。您可以在此List and Keys in React

上阅读更多内容

this.setState({
    campus: e.target.value.map((school,index) => {value: school.value, key: index})
  });