← Nivå 3 – Mästare

Lektion 5 av 10 ⏱ 40 minuter Premium

State: en app som minns

Lär dig useState – en komponents minne. Din app börjar reagera på klick på React-sätt.

Varför en vanlig variabel inte räcker

På nivå 2 byggde du en räknare genom att själv skriva om knappens text efter varje klick. React gör det annorlunda: du ändrar datan, och React ritar om skärmen. Men du måste lämna över datan till en speciell låda som heter state – annars märker React inte ändringen.

Jag visar: en räknare 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;

Den viktigaste raden – const [count, setCount] = useState(0);:

Och onClick={...} är React-versionen av addEventListener("click", ...) – direkt inuti JSX.

Märk vad som inte finns i koden: inget getElementById, inget textContent. Du säger inte hur skärmen ska ändras – du säger vad som är sant nu (count är nu 5), och skärmen ordnar sig själv.

Jag visar: state styr vad som syns

State behöver inte bara vara ett tal. Ett ihopfällbart avsnitt, på React-sätt:

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

Två nya JSX-knep:

Och !open betyder “motsatsen” – det vänder true till false och tvärtom. En rad = en växel.

Nu är det din tur 💪

Lägg till två saker med state i din app:

  1. Ett ihopfällbart avsnitt (ett true/false-state) som passar ditt projekt: 🏫 en ihopfällbar lunchmeny · 🙋 “visa/göm mina toppspel” · 🌍 en ihopfällbar lista med länder · ⚽ en ihopfällbar trupp.
  2. En räknare eller en omröstning (ett numeriskt state): 🏫 rösta om klassresan · 🙋 “hur många har hälsat på mig idag” · 🌍 räknare för besökta länder · ⚽ en resultattavla med +1 hemma / +1 borta-knappar (två states!).
Bonuslösning: resultattavla med två 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 ha hur många lådor som helst – varje useState är en.

Kolla själv: Din app har minst två interaktiva ställen, och det finns inget getElementById någonstans i koden. Om du klarat det här tankeskiftet (“jag ändrar datan, inte skärmen”) har du klarat den svåraste delen av React.

Det här tar du med dig från lektionen