← Niveau 3 – Mester

Lektion 5 af 10 ⏱ 40 minutter Premium

State: en app, der husker

Lær useState – en komponents hukommelse. Din app begynder at reagere på klik på React-måden.

Hvorfor en almindelig variabel ikke er nok

I niveau 2 byggede du en tæller ved selv at omskrive knappens tekst efter hvert klik. React gør det anderledes: du ændrer dataene, og React tegner skærmen om. Men du skal overgive dataene til en speciel boks kaldet state – ellers bemærker React ikke ændringen.

Vis mig: en tæller i React

import { useState } from 'react';

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

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

export default Counter;

Bryd den vigtigste linje ned – const [count, setCount] = useState(0);:

Og onClick={...} er React-versionen af addEventListener("click", ...) – lige inde i JSX.

Læg mærke til, hvad der ikke er i koden: ingen getElementById, ingen textContent. Du siger ikke hvordan skærmen skal ændres – du siger hvad der er sandt nu (count er nu 5), og skærmen retter sig selv.

Vis mig: state styrer, hvad der er synligt

State behøver ikke bare at være et tal. En sammenklappelig sektion, React-måden:

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>
  );
}

To nye JSX-tricks:

Og !open betyder “det modsatte” – det vender sand til falsk og omvendt. Én linje = en kontakt.

Nu er det din tur 💪

Tilføj to ting med state til din app:

  1. En sammenklappelig sektion (en true/false-state), der matcher dit projekt: 🏫 en sammenklappelig frokostmenu · 🙋 “vis/skjul mine topspil” · 🌍 en sammenklappelig liste over lande · ⚽ en sammenklappelig trup.
  2. En tæller eller en afstemning (en numerisk state): 🏫 stem på klasseturen · 🙋 “hvor mange har hilset på mig i dag” · 🌍 besøgte lande-tæller · ⚽ en resultattavle med +1 hjemme / +1 ude-knapper (to states!).
Bonusløsning: en resultattavle med to 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;

En komponent kan have så mange bokse, den vil – hver useState er én.

Tjek dig selv: Din app har mindst to interaktive steder, og der er ingen getElementById nogen steder i koden. Hvis du har mestret dette mentale skift (“jeg ændrer dataene, ikke skærmen”), har du mestret den sværeste del af React.

Det tager du med fra denne lektion