2017-08-29 2 views
2

Ich versuche, einen FlatList von json von einem api geholt zu machen, aber ich halte diesen Fehler:Reagieren Nativ: Kann nicht FlatList Schlüssel beheben Warnung

Warning: Each child in an array or iterator should have a unique "key" prop. 
Check the render method of `VirtualizedList`. 

Relevante Code:

<FlatList 
    data={this.props.tunes} 
    keyExtractor={(item, index) => item.id} 
    renderItem={({item}) => { 
    <Item 
     key={item.id} 
     title={item.title} 
     composer={item.composer} 
     year={item.year} 
    /> 
    }} 
/> 

Ich bin mir sicher, dass es eine einfache Lösung dafür gibt, aber nach ein paar Tagen des Ausprobierens habe ich es nicht gefunden. Danke für Ihre Hilfe!

+0

Sind Sie sicher, dass die item.id für jeden Artikel unterschiedlich ist? Und stellen Sie sicher, dass es in den Daten keinen doppelten Eintrag gibt. – bennygenel

+0

Vielleicht ist das, wo ich verwirrt bin. Es gibt keine item.id im JSON, aber ich dachte, dass React es in diesem Fall vielleicht liefern würde. Muss ich den JSON zuordnen, indem ich jedem Element eine ID hinzufüge, bevor ich die Daten an FlatList weitergebe? – Thomas

+0

müssen Sie den Schlüssel selbst erstellen. Sie können etwas wie 'item.name + index' machen oder etwas kann für jedes Element eindeutig sein und wird nicht geändert – bennygenel

Antwort

3

Sieht aus wie Sie benötigen key-id zu ändern, wie Sie item.id in keyExtractor zu schreiben und sicherzustellen, dass Sie id haben und es ist anders für jede Komponente:

<FlatList 
    data={this.props.tunes} 
    keyExtractor={(item, index) => item.id} 
    renderItem={({item}) => { 
    <Item 
     id={item.id} //instead of key 
     title={item.title} 
     composer={item.composer} 
     year={item.year} 
    /> 
    }} 
/> 

Oder wenn Sie haben nicht eindeutigen Schlüssel verwenden keyExtractor={(item, index) => index}

+0

Vielen Dank für item.id in keyExtractor –

Verwandte Themen