Odeslání formuláře

Zatím stránka jen ukazovala, co uživatel napsal. Aby si vstupenky zarezervoval, formulář odešle. Stejně jako v kurzu JavaScriptu patří prvky formuláře do prvku form s tlačítkem pro odeslání a v Reactu dostane formulář onSubmit:

import { useState } from "react";

export default function App() {
    const [email, setEmail] = useState("");
    const [prihlaseno, setPrihlaseno] = useState(false);

    function prihlas(event) {
        event.preventDefault();
        setPrihlaseno(true);
    }

    return (
        <main>
            <form onSubmit={prihlas}>
                <label htmlFor="email">E-mail</label>
                <input
                    id="email"
                    value={email}
                    onChange={(event) => setEmail(event.target.value)}
                />
                <button type="submit">Přihlásit se</button>
            </form>
            {prihlaseno && <p>Děkujeme! Budeme psát na {email}.</p>}
        </main>
    );
}

React zavolá onSubmit, když se formulář odešle, tlačítkem nebo Enterem v některém z jeho textových polí. A stejně jako v kurzu JavaScriptu pak prohlížeč udělá svou výchozí akci: pošle vyplněné údaje na server a načte stránku znovu. Pro aplikaci v Reactu to znamená začít úplně od začátku: každá stavová proměnná má zase svou počáteční hodnotu. Vyzkoušejte si to v náhledu tohoto cvičení, než začnete: napište jméno a klikněte na Rezervovat. Stránka se načte znovu a textové pole je prázdné. event.preventDefault() prohlížeč zastaví, a tak ho v obsluze zavolejte jako první.

Obsluha nemusí textová pole číst: co uživatel napsal, už je ve stavu, tady v email. Jen rozhodne, co se stane, a tady si do stavu zapamatuje, že se uživatel přihlásil.

Formulář, který svou práci udělal, často uvolní místo zprávě. To zařídí předčasný návrat (return) z lekce Seznamy a podmínky: s if (prihlaseno) před return s formulářem vrátí komponenta jen zprávu a formulář se vůbec nevykreslí.

Typická chyba:

  • event.preventDefault; bez závorek metodu nezavolá, takže se stránka znovu načte.

Pokyny

Když se formulář odešle, zabraňte novému načtení stránky a pod formulářem ukažte Děkujeme! Vstupenka Víkend na jméno Eva je zarezervovaná. v odstavci s třídou zprava, s vybranou vstupenkou a jménem z textového pole. Jestli je vstupenka zarezervovaná, mějte ve stavové proměnné. Zkuste formulář odeslat tlačítkem i Enterem.

Jakmile je vstupenka zarezervovaná, ukažte jen nadpis a zprávu, bez formuláře: vraťte je dřív, pomocí if.

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

6/9

Další