2016-12-16 5 views
7

私はそのエラーを受けていますが、私はキーを定義しています。ここに私のApp.jsがあります。React警告:配列またはイテレータ内の各子には、一意の「キー」小文字が必要です。 `App`のレンダリングメソッドを確認してください

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

はその後、あなたがedge.node.idの値がどのようにユニークな心配する必要はありません。

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')} 
         } 
        } 
       } 
      } 
     `, 
    }, 
}); 
+3

bob rossはあなたのコード山を誇りに思うでしょう。しかし、本当にあなたはあなたのedge.node.idの一意性をチェックするべきです。 – aaaaaa

+0

私が推測する通常の健全性チェックを行います。上記のコードはエラーの100%ソースですか?実際に固有のIDですか?おそらくあなたはいくつかの未定義/ヌルを持っています – azium

+0

IDが重複しているかどうかを確認してください: 'console.log(this.props.viewer.accounts.edges.map(edge => edge.node.id))' – sdgluck

答えて

7

これを修正する最も簡単な方法は、マップのインデックスoffキーをベースにあります。 keyは、すべてのAccountTable兄弟のコンテキスト内で一意である必要があります。世界的にユニークである必要はありません。インデックスはうまくいきます。

しかし、オブジェクトに基づいた安定したIDを持っている場合は、明らかに優れています。

+0

反応の文書によると、「レンダリングされたアイテムのIDが安定していない場合は、アイテムインデックスを最後の手段としてキーとして使用することができます。だから、私はこれを行う前に安定したIDを取得する方法がないことを確認したいと思います。私のノードが別のフラグメントを参照しているため、その正面の提案はありませんか? – LoneWolfPR

+0

あなたが別のIDを持っていない限り、これはあなたの「最後の手段」でしょうか? –

+0

それは確かに問題を解決します。私はもう少し掘り下げるつもりですが、オブジェクトのIDを取得する方法が見つからない場合、これを解決策としてマークします。ありがとう! – LoneWolfPR

関連する問題