\section{Navigáció}
\begin{frame}{Mit jelent a kliensoldali navigáció?}
\begin{block}{Hagyományos vs.\ SPA navigáció}
Hagyományos weboldalon minden oldalváltáskor a böngésző \textbf{új HTTP kérést} küld, és teljesen újratölti az oldalt.
SPA (Single Page Application) esetén az oldal egyszer töltődik be, a navigáció pedig JavaScript-tel történik,
ezért gyorsabb és folyamatosabb élményt ad.
\end{block}
\vspace{0.5em}
A React Router a legelterjedtebb könyvtár erre a feladatra React alkalmazásokban.
\end{frame}
\begin{frame}{React Router --- hogyan működik?}
\begin{itemize}
\item A \texttt{BrowserRouter} figyeli a böngésző URL-jét.
\item A \texttt{Routes} és \texttt{Route} elemek URL mintákhoz komponenseket rendelnek.
\item A \texttt{Link} URL-t vált teljes oldalfrissítés nélkül.
\item A React újrarendereli a megfelelő oldalkomponenst az aktuális útvonal alapján.
\end{itemize}
\end{frame}
\begin{frame}[fragile]{React Router példa kód 1/2}
\begin{verbatim}
import { BrowserRouter, Routes, Route, Link } from "react-router-dom";
function App() {
return (
\end{verbatim}
\end{frame}
\begin{frame}[fragile]{React Router példa kód 2/2}
\begin{verbatim}
} />
} />
} />
);
}
\end{verbatim}
\end{frame}
\begin{frame}{Dinamikus útvonalak (React Router)}
\begin{itemize}
\item Paraméteres route példa: \texttt{/termekek/:id}
\item Ha az URL \texttt{/termekek/42}, akkor a \texttt{useParams()} eredménye: \texttt{\{ id: "42" \}}
\item Tipikusan ilyen paraméterrel kérünk le részletes adatot API-ból.
\end{itemize}
\end{frame}
\begin{frame}{Mappa routing (file-system routing) --- mi ez?}
\begin{block}{Alapelv}
Mappaalapú routingnál az útvonalakat nem külön \texttt{Routes} konfigurációban írjuk,
hanem a mappastruktúra \textbf{automatikusan} meghatározza őket.
\end{block}
\vspace{0.5em}
\begin{itemize}
\item Ez főleg Next.js-ben elterjedt (App Router).
\item Az \texttt{app/} mappában minden \texttt{page.tsx} egy útvonalat jelent.
\item Dinamikus route mappanévben: \texttt{[id]}.
\end{itemize}
\end{frame}
\begin{frame}[fragile]{Mappa routing példa (Next.js App Router)}
\begin{verbatim}
app/
page.tsx -> /
kapcsolat/
page.tsx -> /kapcsolat
termekek/
page.tsx -> /termekek
[id]/
page.tsx -> /termekek/:id
\end{verbatim}
\end{frame}
\begin{frame}[fragile]{Dinamikus mappa route komponens példa}
\begin{verbatim}
// app/termekek/[id]/page.tsx
export default function ProductPage({ params }) {
return