当前位置: 首页 > 知识库问答 >
问题:

React JSX:条件数组中的唯一键属性

裴甫
2023-03-14

在一个无子React组件中,由于在JSX条件中使用数组,我得到了“unique key prop”错误:

数组中的每个子元素都应该有一个唯一的“键”道具。

触发错误的代码如下所示:

<dl>
  { item.sale ? 
    [<dt>Sale</dt>,<dd className="formatted">{item.sale}</dd>,<dt>SRP</dt>,<dd>{item.srp}</dd>] :
    [<dt>Price</dt>,<dd className="formatted">{item.srp}</dd>]
  }
</dl>

我理解为什么在渲染子组件时需要关键道具,但是当“数组中的子”是像这样的任意子元素集时,我如何满足React/JSX?

共有2个答案

端木野
2023-03-14

我也遇到了类似的问题,我解决了在下面的代码中添加key={index}的问题。

this.state.shopList.map((shop, index) => {
          return (
            <Table.Row key={index}>
              <Table.Cell collapsing>{shop.shopName}</Table.Cell>
              <Table.Cell collapsing>{shop.email}</Table.Cell>
              <Table.Cell collapsing>{shop.shopAddress}</Table.Cell>
              <Table.Cell collapsing>{shop.approved}</Table.Cell>
              <Table.Cell collapsing>{shop.iban}</Table.Cell>
            </Table.Row>
          );
        })}
阮鸿煊
2023-03-14

React无法知道您的数组是静态的,因此您会收到警告。这里最实际的做法是写下如下内容:

var dl;
if (item.sale) {
  dl = <dl key="sold">
    <dt>Sale</dt>
    <dd className="formatted">{item.sale}</dd>
    <dt>SRP</dt>
    <dd>{item.srp}</dd>
  </dl>;
} else {
  dl = <dl key="unsold">
    <dt>Price</dt>
    <dd className="formatted">{item.srp}</dd>
  </dl>;
}

提供根上的键告诉React当item.sale更改时,它应该如何协调列表。

我也倾向于发现这更容易阅读。

 类似资料:
  • 问题内容: 我正在构建一个接受JSON数据源并创建可排序表的React组件。 每个动态数据行都有一个分配给它的唯一键,但是我仍然遇到以下错误: 数组中的每个子代都应具有唯一的“键”道具。 检查TableComponent的渲染方法。 我的渲染方法返回: 该组件是单行,并且还为其分配了唯一的键。 每个输入都是通过具有唯一键的组件构建的: 而看起来像这样: 是什么导致独特的按键道具错误? 问题答案:

  • 我正在构建一个React组件,它接受一个JSON数据源并创建一个可排序表。 每个动态数据行都有一个唯一的键分配给它,但我仍然得到一个错误: 数组中的每个子项都应该有一个唯一的“键”道具。 检查TableComponent的render方法。 我的呈现方法返回: 组件是单行,并且还为其分配了唯一的键。 中的每个都是由具有唯一键的组件生成的: 而如下所示: 是什么原因导致了唯一键道具错误?

  • 我遇到一个情况,需要根据另一个列值对一个列[属性]强制执行唯一约束。 例如,我有一个像table(ID,EID,Name,ISDeleted)这样的表 ISDeleted只能有一个值null或'y'(active或deleted),并且我想在EID上创建一个唯一的约束,仅当ISDeleted=null时才创建ISDeleted,因为我不关心是否有多个具有相同ID的已删除记录。请注意,EID可以为空

  • 我创建了一个对象数组,如下所示: 我正在尝试创建一个新数组,该数组过滤位置,使其仅包含不具有相同城市属性的对象(lat/lng重复项可以)。是否有内置的JS或Jquery函数来实现这一点?

  • 我正在尝试将key+value推入具有其唯一值的数组中。 像这样尝试: console.log输出给出正确的值: 我要做的是将键和值推入输入字段,这样输入字段将是:username:password: 不需要硬编码,因为我数组中的每个对象都有不同的键和值。

  • 我使用React来呈现数据列表,但是数据中的每一项都没有被分配id或uuid或类似于标识属性的东西。我可以使用项目索引作为关键吗?喜欢: 我所关心的是,如果页面上的其他列表也使用order索引作为子组件键,这有关系吗?钥匙应该是唯一的标识吗?