Přeskočit na obsah
Kurz Reactu1.0.0 beta
CSEN
Kurz Reactu1.0.0 beta
CSEN
🏠 Úvod🧭 Kde začít?🔁 Opakování📄 Taháky📰 Co je novéhoℹ️ O kurzu
JavaScript0/22
TypeScript0/6

Základy

  • 01 Rychlé opakování základů0/3
  • 02 Stav a události (useState)0/3

Hooky do hloubky

  • 03 Efekty (useEffect)0/3
  • 04 Refy (useRef)0/3
  • 05 Složitější stav (useReducer)0/3
  • 06 Context0/3
  • 07 Vlastní hooky0/3

Formuláře

  • 08 Formuláře a React 19 Actions0/3

Výkon

  • 09 Výkon a renderování0/3

Vzory

  • 10 Návrhové vzory komponent0/3

Ekosystém

  • 11 TypeScript s Reactem0/3
  • 12 Routování (React Router)0/3
  • 13 Načítání dat0/3
  • 14 Správa stavu aplikace0/3

Projekt

  • 15 Závěrečný projekt: Kanban0/2

Shrnutí

  • 16 Shrnutí: principy Reactu

Tvůj účet

Ochrana osobních údajů

React 15 · Projekt

Závěrečný projekt: Kanban

Poskládej všechno dohromady do jedné aplikace.

Načítám lekci…

💬 Našel jsi chybu, něco ti není jasné, nebo máš nápad? Napiš mi.
← Správa stavu aplikaceShrnutí: principy Reactu →

Než začneme: dům se staví od základů

Nikdo nestaví dům tak, že nejdřív pověsí záclony a pak hledá, kam by postavil zdi. Postup je opačný: plán (kde budou místnosti), základy, hrubá stavba, pak rozvody elektřiny a vody – a vybavení až nakonec. Každá fáze stojí na té předchozí, a když se základy udělají dobře, další patra drží sama.

Aplikace se staví stejně:

  1. Plán = typy. Jaká data existují a jak vypadají? Karta, sloupec, priorita, akce.
  2. Základy = logika bez UI. Reducer, který umí přidat, upravit, přesunout a smazat kartu. Dá se vyzkoušet i bez jediné komponenty.
  3. Hrubá stavba = statické UI. Sloupce a karty, které jen zobrazují data – zatím bez klikání.
  4. Rozvody = interaktivita. Handlery, formuláře, modal, ukládání.
  5. Vybavení = vylepšení. Drag & drop, undo, výkon – jen když základ stojí.

Teď je čas poskládat všechno dohromady. Postav Kanban tabuli – malou, ale skutečnou aplikaci, ve které použiješ většinu toho, co ses naučil. Postupuj po milnících a každý si odškrtni.

Rozcvička

Výzva

Karta úkolu

Rozcvička

Než se pustíš do celého kanbanu, rozehřej se na jeho nejmenší části – jedné kartě.

Zadání najdeš v komentářích v kódu níže – na začátku souboru a u míst označených TODO.

🧩 Odkud se berou věci, které tu nejsou definované
CSS třídy jako row, stack, card, list, btn, input nebo muted jsou hotové styly kurzu v src/styles.css (row = prvky vedle sebe, stack = pod sebou, card = rámeček, muted = šedý text).

Načítám interaktivní část…

Milníky

Architektonická rozhodnutí

Než začneš psát, zamysli se nad těmito otázkami. Každá odpovídá jedné představě z kurzu: sešit (stav), bankovní účet (reducer), rozhlas (Context), šuplík (ref), světlo v místnosti (efekt). Vzorové řešení volí odpovědi v pravém sloupci – tvoje mohou být jiné.

OtázkaVzorové řešeníProč
Kde žijí karty?useReducer + ContextMnoho různých akcí nad stejnými daty (bankovní účet) a potřebuje je víc komponent (rozhlas). Stav a dispatch v oddělených kontextech.
Ukládám sloupec do karty, nebo karty do sloupců?column v kartě, ploché polePřesun = změna jedné hodnoty, žádné kopírování mezi poli. Počty karet ve sloupcích se jen spočítají.
Kde je text hledání?Lokální useState v BoardVěc v kapse jedné komponenty. V aplikaci s routerem by patřil do adresy (přání k pokoji).
Rozpracovaná úprava karty?Lokální koncept v modaluPapíry na pracovním stole: do „banky“ jde až po Uložit, takže Zrušit nemusí nic vracet.
Jak funguje undo?Historie v reduceruReducer je jediné místo, kde vznikají změny – výpis z účtu je zadarmo.
Ukládání?Efekt synchronizuje cards → localStoragelocalStorage je okolní svět (světlo v místnosti); líná inicializace reduceru ho při startu načte.
✨ Jak postupovat
  1. Začni typy a reducerem – bez UI. Reducer si můžeš vyzkoušet v konzoli.
  2. Pak statické UI se zadrátovanými daty. Až potom interaktivitu.
  3. Rozděl kód do souborů ve složce src/lessons/15-project/challenges/kanban/.
  4. Průběžně spouštěj npm run typecheck.
  5. Až budeš mít hotovo, porovnej svoje řešení se vzorem – a klidně vymysli vlastní vylepšení.
❓ Jak rozdělím kód do víc souborů?

Co má být vidět v jiném souboru, označ export. V druhém souboru si to vezmeš přes import s cestou relativní k aktuálnímu souboru (bez přípony):

// kanban/types.ts
export type ColumnId = 'todo' | 'doing' | 'done'
export interface Card { id: string; title: string; column: ColumnId }
// kanban/boardReducer.ts
import type { Card } from './types' // "import type" = jen typ, po kompilaci zmizí
export function boardReducer(…) { … }
// Kanban.tsx (o složku výš)
import { boardReducer } from './kanban/boardReducer'

Pojmenovaný export (export function X) se importuje ve složených závorkách a se stejným jménem. export default může mít soubor jen jeden a importuje se bez závorek pod libovolným jménem. Tak to dělají soubory výzev, které importuje lekce. Jedna komponenta na soubor je dobré pravidlo, typy a reducer mají svoje soubory.

❓ Jak funguje nativní drag & drop (bonusový milník)?

Prohlížeč umí přetahování sám, stačí mu říct tři věci:

// 1) CO se táhne: prvek musí mít draggable a při startu si „zabalí“ data
<li draggable onDragStart={(e) => e.dataTransfer.setData('text/plain', card.id)}>
// 2) KAM se smí pustit: bez preventDefault prohlížeč puštění zakáže
<section onDragOver={(e) => e.preventDefault()}
// 3) CO se stane po puštění: vybal data a pošli akci
onDrop={(e) => {
const id = e.dataTransfer.getData('text/plain')
dispatch({ type: 'card_moved', id, column: 'done' })
}}>

dataTransfer je „krabice“, která cestuje s taženým prvkem. Ukládá se do ní jen text, proto do ní dáváš ID karty, ne celý objekt. Reducer pak přesun provede stejně jako u tlačítek ← →, mění se jen to, kdo akci pošle.

Výzva

Kanban tabule

TěžkáBonus · zdarma po přihlášení

Co má tabule umět, říkají milníky výše a komentáře TODO v kódu. Vzorové řešení si vyzkoušej v záložce „Vzorové řešení“ – ukládá se do localStorage, takže přežije reload.

🔓 Bonusová výzva – zdarma po přihlášení

Střední a těžké výzvy se odemknou, jakmile se přihlásíš. Stejně jako celý kurz jsou zdarma – stačí e-mail, žádné heslo ani platba.

Jak nakládáme s tvými údaji

Kam dál

  • Next.js nebo React Router (framework mode) – Server Components, Server Actions, SSR a routování podle souborů.
  • Testování – Vitest + React Testing Library; reducery a hooky se testují nejsnáz.
  • Přístupnost – React Aria nebo Radix pro komponenty, které fungují s klávesnicí a čtečkou.
  • React Compiler – zapni ho v projektu a sleduj, kolik ručních memo můžeš smazat.
  • react.dev – oficiální dokumentace je výborná; sekce „Learn“ a „Escape Hatches“ si přečti celé.

Shrnutí

  • Aplikace se staví od základů: typy (plán) → reducer (základy) → statické UI (hrubá stavba) → interaktivita (rozvody).
  • Každý kus stavu dej tam, kam patří: reducer/Context, lokální stav, URL, localStorage.
  • Odvozuj, co jde spočítat; efekty jen pro externí systémy.
  • Gratuluji – prošel jsi celý kurz! 🎉