【问题标题】:Warning: Each child in an array or iterator should have a unique "key" prop. Keys are already present警告:数组或迭代器中的每个孩子都应该有一个唯一的“key”道具。密钥已经存在
【发布时间】:2019-01-15 22:05:23
【问题描述】:

我有一个 React 组件,它接受一个数组并使用预定义的键将其呈现为一个表。

<TableFromJson data={this.props.results.events} rowKey="eventID" />

TableFromJson.js

    import React, { Component } from 'react';
    import { Table } from 'react-bootstrap';
    import PropTypes from 'prop-types';

    export class TableFromJson extends Component{

        render() {
            if (!this.props.data)
                return(<p>No data</p>);

            const key = this.props.rowKey;
            let columns = Object.keys(this.props.data[0]);
            let headerComponents = columns.map(col => <th>{col}</th>);

            let rowComponents = this.props.data.map((row) =>{
                let tdList = columns.map(col => <td>{row[col]}</td>);
                let htmlRow = <tr key={row[key]}>{tdList}</tr>;
                return htmlRow;
            });

            return (
                <Table bordered hover responsive striped>
                    <thead>
                        <tr>{headerComponents}</tr>
                    </thead>
                    <tbody>{rowComponents}</tbody>
                </Table>
            );
        }
    }

    TableFromJson.propTypes = {
        data: PropTypes.array,
        key: PropTypes.string
    }

这会呈现一个如下所示的表格:

tr 元素已经包含键,正如您从上面的 React 开发工具屏幕截图中看到的那样。

每次呈现此组件时,我都会收到键错误(“警告:数组或迭代器中的每个子项都应具有唯一的“键”道具”)。我错过了什么?

【问题讨论】:

  • 您应该在数组的每个元素上放置一个键,在这种情况下,即thtdtr
  • @root_access 你的问题解决了吗?如果是这样 - 您可以作为回答/接受答案/或提供一些详细信息做出贡献。否则——所有的努力都是徒劳的!

标签: javascript reactjs


【解决方案1】:

您还应该为子元素添加键:thtd,就像您已经为 tr 所做的那样。

【讨论】:

  • 我忽略了向子元素添加键,我很傻。谢谢!
  • 很高兴我帮助了你:)
猜你喜欢
  • 2018-04-29
  • 2018-05-22
  • 2017-06-17
  • 2017-02-23
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
相关资源
最近更新 更多