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
srcvytvořte souborsetting-context.jsa 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ě
Appvytvoř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.jsve složcesrc, odkud je můžete importovat, kam bude potřeba. - V komponentě
Appobalte celý její JSX obsah do komponentySettingsContext.Provider, která nám umožní context používat v celé aplikaci. - Do prop nazvané
valuenastavte provideru výchozí hodnotu contextu - sem uvložíme hodnotu stavusettings. To bude výchozí konfigurace emotikonu, když uživatel aplikaci spustí. - Upravte komponentu
Emoticontak, 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ě
Appzměníte výchozí hodnoty contextu, zobrazí se odpovídající obličej.