\section{Űrlapkezelés}

\begin{frame}{Kontrollált és nem kontrollált input}
  \begin{block}{Kontrollált input}
    Az input mező értékét a React állapot tárolja és vezérli. A \texttt{value} prop és az \texttt{onChange} esemény mindig szinkronban tartja a React állapotot és a mezőt --- bármikor pontosan tudjuk, mi van a mezőben.
  \end{block}
  \vspace{0.3em}
  \begin{block}{Nem kontrollált input}
    A DOM maga kezeli az értéket --- React csak beküldéskor kéri le (\texttt{useRef}-fel). Egyszerűbb felépítés, de valós idejű validáció nehezebb.
  \end{block}
\end{frame}

\begin{frame}{Miért érdemes kontrollált inputot használni?}
  \begin{itemize}
    \item Mindig pontos képünk van az aktuális beviteli értékről --- nem kell a DOM-ból "kiolvasni".
    \item \textbf{Valós idejű validáció:} hibát jelzünk gépelés közben, nem csak beküldéskor.
    \item Feltételes engedélyezés/tiltás, formázás, karakterlimit könnyen kezelhető.
    \item Hátránya: sok mezőnél sok state szükséges --- erre nyújtanak megoldást a könyvtárak.
  \end{itemize}
\end{frame}

\begin{frame}{Validáció --- mit kell ellenőrizni?}
  \begin{itemize}
    \item \textbf{Kötelező mezők:} ne lehessen üres beküldés.
    \item \textbf{Formátum:} email, telefonszám, irányítószám megfelelő-e?
    \item \textbf{Üzleti szabályok:} min. 8 karakteres jelszó, egyező jelszavak, stb.
    \item A hibákat erős vizuális visszajelzéssel kell jelezni --- a felhasználó ne találgasson, mi a baj.
  \end{itemize}
\end{frame}

\begin{frame}{Miért használjunk könyvtárat?}
  \begin{itemize}
    \item Kézi megvalósításnál sok ismétl�'d�' kód keletkezik --- minden mez�'höz saját state, validáció, hibaüzenet.
    \item \textbf{React Hook Form:} minimális újrarenderelés, nagyon gyors, könnyen tanulható API --- a legtöbb esetben ez az ajánlott.
    \item \textbf{Formik:} régebben nagyon népszerű, sok csapat már ismeri; kicsit több boilerplate.
    \item \textbf{Zod / Yup:} séma alapú validáló könyvtárak --- a validációs logikát típusbiztos sémában írjuk le, React Hook Form-mal jól kombinálható.
  \end{itemize}
\end{frame}
