Delší text a rozbalovací seznamy

Ostatní prvky formuláře fungují stejně: jejich hodnota je ve stavu, prvek ji ukazuje a onChange ji mění. Dva z nich se ale v Reactu píšou trochu jinak než v HTML.

textarea, textové pole na delší text, má v HTML svůj text mezi tagy. V Reactu dostane value stejně jako input a uzavře se sám:

<textarea
    id="poznamka"
    value={poznamka}
    onChange={(event) => setPoznamka(event.target.value)}
/>

I select dostane value. V HTML vybral možnost předem atribut selected. V Reactu o vybrané možnosti rozhoduje stav: je to value prvku select:

const [napoj, setNapoj] = useState("kava");

return (
    <select value={napoj} onChange={(event) => setNapoj(event.target.value)}>
        <option value="caj">Čaj</option>
        <option value="kava">Káva</option>
        <option value="dzus">Džus</option>
    </select>
);

Když se aplikace spustí, je ve stavu "kava", takže je vybraná Káva. Když uživatel vybere Čaj, je event.target.value rovno "caj", hodnotě value té možnosti, a to se uloží do stavu.

Možnosti často pocházejí z dat. V tomto cvičení jsou vstupenky v poli a select z každé udělá pomocí map() jednu option. Stav si drží jen id vybrané vstupenky. Abyste ukázali její název a cenu, najděte ji v poli, ve funkci komponenty před return:

const vybrana = vstupenky.find((vstupenka) => vstupenka.id === druh);

Každé vykreslení najde vstupenku, kterou určuje stav, takže vstupenka pod formulářem vždy odpovídá tomu, co je vybrané v select.

Pokyny

Udělejte z rozbalovacího seznamu vstupenek (select) řízený prvek se stavovou proměnnou druh, která začíná na "vikend". Vybranou vstupenku najděte v poli vstupenky a ukažte její název v odstavci s třídou vstupenka-druh a cenu v odstavci s třídou vstupenka-cena, například Pátek a 990 Kč.

Udělejte z věnování (textarea) řízené textové pole se stavovou proměnnou venovani a věnování ukažte na vstupence v odstavci s třídou vstupenka-venovani.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

Zpět

3/9

Další