V tomto cvičení máme připravenou aplikaci, ve které si uživatel může vytvořit vlastní emotikon. Může si vybrat barvu, oči a ústa z předpřipravených variant, které se mu poskládají do celkového emotikonu.
- Naklonujte si repozitář se zadáním projektu. Prohlédněte si strukturu kódu a vyzkoušejte si fungování aplikace.
- Při kliknutí na oči, ústa nebo barvu se pouze vypíše ID vybrané položky do konzole. Aplikaci musíme upravit, aby se změny projevili na emotikonu v levé části.
- Protože aplikace je sestavená ze spousty komponent, které jsou do sebe vnořené na několika úrovních, víme už dopředu, že bychom se nevyhnuli props drilling - předávání props z komponenty do komponenty, a tam do další komponenty, atd. Proto raději použijeme context.
- Ve složce
src
vytvořte souborsetting-context.js
a v něm vytvořte nový React context s názvemSettingContext
. Vytvořte i vlastní hookuseSettings
, který vám zjednodušší používání contextu. - V komponentě
App
vytvořte stavsettings
, který bude obsahovat objekt v následujícím tvaru:
Jednotlivé hodnoty budou představovat ID vybraného tvaru očí, úst a barvy pozadí. Hodnoty jsou uvedené v souboru{ eyes: 1, mouth: 2, color: 3 }
data.js
ve složcesrc
, odkud je můžete importovat, kam bude potřeba. - V komponentě
App
obalte celý její JSX obsah do komponentySettingsContext.Provider
, která nám umožní context používat v celé aplikaci. - Do prop nazvané
value
nastavte provideru výchozí hodnotu contextu - sem uvložíme hodnotu stavusettings
. To bude výchozí konfigurace emotikonu, když uživatel aplikaci spustí. - Upravte komponentu
Emoticon
tak, aby:- používala náš vytvořený context
- podle hodnot v contextu zobrazovala správný emoticon
- Když se podíváte na komponentu
Emoticon
, vidíte, že do ní na začátku importujeme natvrdo dva obrázky a v JSX používáme natvrdo hodnotu červené barvy. Natvrdo importované hodnoty odstraňte a použijte hodnoty ze souboru/src/data.js
, které odpovídají IDčkům uloženým v contextu. - Aplikace by měla fungovat tak, že když v komponentě
App
změníte výchozí hodnoty contextu, zobrazí se odpovídající obličej.