React Warning: каждый дочерний элемент в массиве или итераторе должен иметь уникальный" ключевой " prop. Проверьте метод рендеринга ' App`

Я получаю эту ошибку, но я определяю ключ. Вот мой App.js на что он жалуется.

import React from 'react';
import Relay from 'react-relay';
import AccountTable from './AccountTable';

class App extends React.Component {
  render() {
    return (
      <div>
        <h1>Account list</h1>
          {this.props.viewer.accounts.edges.map(edge =>
            <AccountTable key={edge.node.id} account={edge.node} />
          )}
      </div>
    );
  }
}

export default Relay.createContainer(App, {
    fragments: {
        viewer: () => Relay.QL`
            fragment on User {
                accounts(first: 10) {
                    edges {
                        node {
                            ${AccountTable.getFragment('account')}
                        }
                    }
                }
            }
        `,
    },
});

1 ответов


самый простой способ исправить это-основать ключ от индекса карты:

{this.props.viewer.accounts.edges.map((edge, i) =>
    <AccountTable key={i} account={edge.node} />
)}

тогда вам не нужно беспокоиться о том, насколько уникально значение edge.node.id есть. The key должен быть уникальным в контексте всех AccountTable братья и сестры. Она не должна быть глобально уникальной. Таким образом, индекс работает хорошо.

однако, если у вас есть стабильный идентификатор, основанный на объекте, это, очевидно, лучше.