Reagieren erfordert, dass Sie ein eindeutiges key
-Attribut für Elemente in einem Array haben. Die React docs empfehlen die Verwendung eines id
aus Ihren Daten. Wenn Sie keine id
haben, können Sie den Array-Index als "letzten Ausweg" verwenden, mit der Einschränkung, dass die Verwendung eines Index zu Leistungsproblemen führen kann, wenn die Elemente neu geordnet werden können. Ich hatte auch einige ärgerliche Probleme beim Erstellen eines Arrays von Elementen aus mehreren Quellen-Arrays und mehrere Aufrufe an .map()
, jeweils mit verschiedenen Transformationen, in welchem Fall die Array-Indizes sowieso nicht eindeutig sein werden.Generieren sequenzieller IDs für ReactJS-Schlüssel
Ich habe angefangen, die folgende Text werfen in meine Komponenten:
constructor(props) {
super(props);
this.getId = this.getId.bind(this);
this.id = 0;
}
getId() {
return this.id++;
}
, die wie so verwendet werden können:
render() {
const items = this.props.greetings.map(text => ({
<li key={this.getId()}>{text}</li>
}));
return (
<ul>
{items}
</ul>
);
}
Das ist einfach, schnell und hat nicht die Probleme dass die Verwendung des Array-Index hat, aber ich weiß nicht, ob es irgendwelche Probleme mit diesem Ansatz oder bessere Alternativen, die ich übersehen habe. Ist das eine schlechte Übung? Gibt es andere einfache Möglichkeiten zum Generieren key
s, die nicht die Array-Indexprobleme haben?
'key' prop muss nicht eine ganze Zahl sein. Sie können eine beliebige Zeichenfolge an Schlüssel übergeben. Also, wenn deine 'text'-Props unter den anderen Geschwister-Komponenten einzigartig sind, kannst du das als' Schlüssel'-Prop übergeben. – bennygenel
@bennygenel dies war ein künstliches Beispiel. Sie können davon ausgehen, dass "Text" nicht eindeutig ist. – mgalgs