Übe, was übrig ist
Die Wörter, die du kannst, brauchen keine Übung. In dieser Übung zeigt die App nur die Karten, die du noch nicht kannst, und wenn du alle kannst, sagt sie es und lässt dich von vorn beginnen.
Welche Karten übrig sind, wird berechnet, wie der Stapel. filter() behält die Wörter, deren id nicht in gelernt ist:
const zuLernen = stapel.filter((wort) => !gelernt.includes(wort.id));Die Karte ist dann zuLernen[index], und die Position zählt auch zuLernen: 1 / 9 heißt, dass noch neun Wörter zu lernen sind. Der Punktestand zählt weiter den ganzen Stapel.
Das ändert, was Kann ich tut. Wenn du eine Karte markierst, fällt sie aus zuLernen heraus, und die nächste Karte rückt unter demselben index an ihre Stelle. gekonnt() geht also nicht mehr mit weiter() weiter. War es die letzte Karte, rückt aber nichts an ihre Stelle, also geht die App zurück zur ersten Karte:
function gekonnt() {
if (!gelernt.includes(karte.id)) {
setGelernt((gelernt) => [...gelernt, karte.id]);
}
if (index === zuLernen.length - 1) {
setIndex(0);
}
}Und wenn zuLernen leer ist, gibt es keine Karte mehr, die man zeigen könnte. App gibt dann eine andere Seite zurück, mit einer Meldung und einem Button Neu starten, der gelernt leert und zur ersten Karte zurückgeht.
So schreibst du es:
Anweisungen
- 1
Erstelle unter
stapelzuLernenwie oben und verwende es stattstapelfür die Karte, die Position, den Button Weiter undweiter()(der Punktestand behältstapel.length). Ersetze ingekonnt()den Aufrufweiter()durch die Rückkehr zur ersten Karte, wie oben. Klicke auf Kann ich: Die Position zeigt1 / 11, und die Karte ist das nächste Wort. - 2
Füge vor dem
returnmit den Karten noch eines ein: IstzuLernen.lengthgleich0, gib einmainmit der Überschrift,<p className="fertig">Du kennst alle Wörter!</p>und einem ButtonNeu startenzurück. Sein HandlerneuStarten()leertgelerntund setztindexwieder auf0. Du siehst diese Seite, sobald du alle Karten markiert hast.