← Level 3 – Meister

Lektion 5 von 10 ⏱ 40 Minuten Premium

State: eine App, die sich merkt

Lerne useState – das Gedächtnis einer Komponente. Deine App reagiert auf Klicks auf die React-Art.

Warum eine normale Variable nicht reicht

In Level 2 hast du einen Zähler gebaut, indem du nach jedem Klick den Button-Text selbst umgeschrieben hast. React macht es anders: Du änderst die Daten, und React zeichnet den Bildschirm neu. Aber du musst die Daten in eine spezielle Box legen – State – sonst merkt React die Änderung nicht.

Zeig mir das: ein Zähler in React

import { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <button onClick={() => setCount(count + 1)}>
      Clicked: {count}×
    </button>
  );
}

export default Counter;

Die wichtigste Zeile im Detail – const [count, setCount] = useState(0);:

Und onClick={...} ist die React-Version von addEventListener("click", ...) – direkt im JSX.

Achte darauf, was nicht im Code steht: kein getElementById, kein textContent. Du sagst nicht wie der Bildschirm geändert werden soll – du sagst, was jetzt wahr ist (count ist jetzt 5), und der Bildschirm richtet sich von selbst.

Zeig mir das: State steuert, was sichtbar ist

State muss keine Zahl sein. Ein aufklappbarer Bereich, die React-Art:

import { useState } from 'react';

function Menu() {
  const [open, setOpen] = useState(false);

  return (
    <div>
      <button onClick={() => setOpen(!open)}>
        {open ? "Hide the menu ▲" : "Show the menu ▼"}
      </button>

      {open && (
        <ul>
          <li>Monday: tomato soup with pasta</li>
          <li>Tuesday: chicken with rice</li>
          <li>Wednesday: pancakes with jam</li>
        </ul>
      )}
    </div>
  );
}

Zwei neue JSX-Tricks:

Und !open heißt „das Gegenteil” – macht aus true false und umgekehrt. Eine Zeile = ein Schalter.

Jetzt du 💪

Füge deiner App zwei Dinge mit State hinzu:

  1. Ein aufklappbarer Bereich (State true/false) passend zu deinem Projekt: 🏫 aufklappbares Mittagsmenü · 🙋 „zeig/versteck meine Top-Spiele” · 🌍 aufklappbare Länderliste · ⚽ aufklappbarer Kader.
  2. Ein Zähler oder eine Abstimmung (numerischer State): 🏫 Abstimmung für den Klassenausflug · 🙋 „wie viele haben mich heute begrüßt” · 🌍 Zähler besuchter Länder · ⚽ Anzeigetafel mit +1 home / +1 away Buttons (zwei States!).
Bonus-Lösung: Anzeigetafel mit zwei States
import { useState } from 'react';

function Score() {
  const [home, setHome] = useState(0);
  const [away, setAway] = useState(0);

  return (
    <div className="card">
      <h3>Riverside {home} : {away} Lakeside</h3>
      <button onClick={() => setHome(home + 1)}>Home goal ⚽</button>
      <button onClick={() => setAway(away + 1)}>Away goal 😤</button>
      <button onClick={() => { setHome(0); setAway(0); }}>New match</button>
    </div>
  );
}

export default Score;

Eine Komponente kann so viele Boxen haben, wie sie will – jedes useState ist eine.

Kontrolliere dich selbst: Deine App hat mindestens zwei interaktive Stellen, und nirgends im Code steht getElementById. Wenn du diesen Gedankenwechsel beherrschst („Ich ändere die Daten, nicht den Bildschirm”), hast du den schwersten Teil von React gemeistert.

Das nimmst du aus dieser Lektion mit