Eine Liste von Karten
map() kann Daten auch in Komponenten verwandeln, nicht nur in li-Elemente. In der Lektion über Props hast du für jede Band eine eigene BandKarte geschrieben. Bei fünf Bands sind das fünf Zeilen, bei fünfzig wären es fünfzig, und jede neue Band in den Daten bräuchte eine weitere. Ein einziges map() zeigt sie alle an:
{bands.map((band) => (
<BandKarte key={band.id} band={band} />
))}Für jede Band gibt map() eine BandKarte zurück und übergibt ihr die Band in den Props. Der Key gehört an das Element, das map() zurückgibt: hier an die BandKarte. Die Karten sind die Einträge der Liste, nicht die article-Elemente in ihnen.
Die Daten liegen jetzt in einer eigenen Datei, bands.js. Das ist eine gewöhnliche JavaScript-Datei ohne JSX, die das Array exportiert: export const bands = [ … ];. App.jsx importiert es mit einem benannten Import, wie du ihn aus der Lektion über Komponenten kennst: import { bands } from "./bands.js";. Liegen die Daten in einer eigenen Datei, bleiben die Komponenten kurz, und mehrere Komponenten können dieselben Daten importieren.
Typische Fehler:
- Der Key steht in
BandKarte, amarticle. React braucht den Key an den Einträgen der Liste, und inBandKartegibt es keine Liste, nur ein einzelnesarticle. Die Konsole warnt weiter. - Der Key wird in
BandKartegelesen.keygehört nicht zu den Props, also bekommtfunction BandKarte({ key })den Wertundefined, und die Konsole warnt, dasskeykeine Prop ist. Braucht die Karte die Id, hat sieband.id.
So schreibst du es:
Anweisungen
- 1
Ersetze die beiden
BandKarte-Elemente durch ein einzigesmap(), das für jede Band inbandseine Karte anzeigt. - 2
Gib jeder Karte einen Key, damit die Konsole keine Warnung mehr zeigt.