2016-12-16 2 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

밥 로스는 코드 산맥의 자랑이 될 것입니다. 그러나 정말로 당신은 당신의 가장자리의 유일성을 검사해야합니다. 노드 .id. – aaaaaa

+0

내가 생각하는 평범함을 확인한다. 위의 코드가 오류의 100 % 출처입니까? 실제로 고유 한 ID는 있습니까? 어쩌면 당신은 당신이 중복 된 ID가 있는지 확인 – azium

+0

undefineds/널의 몇 가지있다 :'을 console.log (this.props.viewer.accounts.edges.map (에지 => edge.node.id는))' – sdgluck

답변

7

이 문제를 해결하는 가장 쉬운 방법은 맵의 인덱스 off 키를 기반으로하는 것입니다. key은 모든 AccountTable 형제의 맥락에서만 고유해야합니다. 전 세계적으로 고유 할 필요는 없습니다. 따라서 색인이 잘 작동합니다. 당신이 개체의 해제를 기반으로 안정적인 ID가있는 경우

그러나, 그것은 분명 더 낫다.

+0

는 "당신이 렌더링 된 항목에 대한 안정적인 ID를 가지고 있지 않은 경우, 당신은 최후의 수단으로 키로 항목의 인덱스를 사용할 수 있습니다." 그래서, 나는 이것을하기 전에 안정된 ID를 얻을 수있는 방법이 없는지 확인하고 싶습니다. 그 프런트에 대한 제안이나, 내 노드가 다른 프래그먼트를 참조하기 때문에 가능하지 않습니까? – LoneWolfPR

+0

다른 이드가 없다면, 이것이 당신의 "최후의 수단"일지도 모릅니다. 맞습니까? –

+0

확실히 문제가 해결됩니다. 나는 더 많은 파기를 할 것입니다. 그러나 객체의 ID를 얻을 수있는 방법을 찾을 수 없다면 이것을 해결책으로 표시 할 것입니다. 감사! 당신이 키로 항목 인덱스를 사용하는 경우, 그것은 경우에 작동하지 않을 수 있습니다 – LoneWolfPR

관련 문제