# React Feladat: Téma Váltó Alkalmazás **Bejelentkezés szintje:** Alapszintű **Becsült időtartam:** 45 perc **Megkövetelt technológiák:** React, React Router, Context API, Tailwind CSS --- ## 📋 Feladat Leírása Készítsd el egy egyszerű **Téma Váltó (Theme Switcher)** alkalmazást React-ben, amely lehetővé teszi a felhasználónak, hogy váltson a világos és sötét mód között. Az alkalmazásnak tartalmaznia kell egy felső navigációs sávot, többoldali routing-ot és globális állapotkezelést Context API-val. --- ## 🎯 Elvégzendő Feladatok ### 1. Projekt Beállítás (5 perc) - [ ] Proj már létezik vagy új Vite + React projekt létrehozása - [ ] Tailwind CSS telepítése és konfigurálása - [ ] React Router (v6) telepítése és beállítása ### 2. Context API Beállítása (8 perc) - [ ] Hozz létre egy `ThemeContext.jsx` fájlt - [ ] Domb le az alábbi értékeket a context-ben: - `theme` (light / dark) - `toggleTheme()` függvény - [ ] Wrapped az App komponenst a `ThemeProvider`-rel ### 3. Navigáció Komponens (10 perc) - [ ] Hozz létre egy `Navbar.jsx` komponenst - [ ] Tartalmazzon: - Logo/alkalmazásnév - 2-3 db navigációs linkek (Home, About, Contact) - **Téma váltó gomb** (☀️ / 🌙 ikon vagy szöveg) - [ ] Styling Tailwind-vel (responsive, reszponzív dizájn) - [ ] A navbar viselkedje a theme alapján az osztályokat ### 4. Routing Beállítása (7 perc) - [ ] Konfigurálj 3 oldalt: - **Home** (`/`) - Üdvözlő oldal - **About** (`/about`) - Rövid bemutatkozás - **Contact** (`/contact`) - Dummy kontakt form - [ ] Hozz létre komponenseket az egyes oldalakhoz ### 5. Home Oldal Implementálása (10 perc) - [ ] Beágyazz egy hőséges fejléc ("Welcome to Theme Switcher") - [ ] Tartalmazz szövegeket és egyCall-to-Action gombot - [ ] Styling Tailwind-vel (gradient, árnyékok, responsivitás) - [ ] Gondoskodj arról, hogy az aktuális téma alapján megíródnak az osztályok ### 6. Egyéb Oldalak (5 perc) - [ ] **About oldal:** Rövid szöveg az alkalmazásról - [ ] **Contact oldal:** Dummy form vagy kontakt információ - [ ] Mindkét oldal legyen tema-aware --- ## 📁 Kötelező Fájlok Szerkezete ``` src/ ├── context/ │ └── ThemeContext.jsx ├── components/ │ ├── Navbar.jsx │ ├── Home.jsx │ ├── About.jsx │ └── Contact.jsx ├── App.jsx ├── App.css (üres vagy minimal) └── index.css (Tailwind imports) ``` --- ## 🎨 Minimális Tailwind Stílus Követelmények - [ ] Light mode: fehér háttér, sötét szöveg - [ ] Dark mode: sötét háttér (pl. slate-900), világos szöveg - [ ] Navbar: sticky felső sáv, logó, linkek, theme toggle gomb - [ ] Home oldal: nagy fejléc, hero szekció, CTA gomb - [ ] Responsive: mobile, tablet, desktop nézetekben működjön --- ## 💾 Context API Struktura ```javascript // ThemeContext.jsx export const ThemeContext = createContext(); export const ThemeProvider = ({ children }) => { const [theme, setTheme] = useState('light'); const toggleTheme = () => { setTheme(prev => prev === 'light' ? 'dark' : 'light'); }; return ( {children} ); }; ``` --- ## 🚀 Bonus Feladatok (opcionális) - [ ] Local Storage-ba mentsd az aktuális téma preferenciát - [ ] Smooth transition az egyik téma között (CSS transition) - [ ] Több mint 3 oldal hozzáadása - [ ] Form validáció a Contact oldalon --- ## ✅ Ellenőrzőlista az Elkészüléshez - [ ] Az alkalmazás elindul hiba nélkül - [ ] A téma váltó gomb működik (light ↔ dark) - [ ] Az összes oldal theme-hez igazodik - [ ] A navbar mindenütt megjelenik - [ ] A router működik az összes linkre - [ ] Responsive design működik - [ ] Keine console hibák --- ## � Parancsok és Kód Sablonok ### Telepítési Parancsok ```bash # Új Vite + React projekt npm create vite@latest my-theme-app -- --template react cd my-theme-app npm install # React Router telepítése npm install react-router-dom # Tailwind CSS telepítése npm install -D tailwindcss postcss autoprefixer npx tailwindcss init -p # Fejlesztői szerver indítása npm run dev ``` ### App.jsx Sablon ```jsx import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; import { ThemeProvider } from './context/ThemeContext'; import Navbar from './components/Navbar'; import Home from './components/Home'; import About from './components/About'; import Contact from './components/Contact'; function App() { return (
} /> } /> } />
); } export default App; ``` ### ThemeContext.jsx Sablon ```jsx import { createContext, useState } from 'react'; export const ThemeContext = createContext(); export const ThemeProvider = ({ children }) => { const [theme, setTheme] = useState('light'); const toggleTheme = () => { setTheme(prev => prev === 'light' ? 'dark' : 'light'); }; return ( {children} ); }; ``` ### Navbar.jsx Sablon ```jsx import { useContext } from 'react'; import { Link } from 'react-router-dom'; import { ThemeContext } from '../context/ThemeContext'; export default function Navbar() { const { theme, toggleTheme } = useContext(ThemeContext); return ( ); } ``` ### Home.jsx Sablon ```jsx import { useContext } from 'react'; import { ThemeContext } from '../context/ThemeContext'; export default function Home() { const { theme } = useContext(ThemeContext); return (

Üdvözlünk!

Ezt az alkalmazást a React, Router és Context API segítségével készítettük.

); } ``` ### Tailwind CSS Import (index.css) ```css @tailwind base; @tailwind components; @tailwind utilities; ``` ### Contexet Használata Komponensben ```jsx import { useContext } from 'react'; import { ThemeContext } from '../context/ThemeContext'; export default function MyComponent() { const { theme, toggleTheme } = useContext(ThemeContext); return (
{/* tartalom */}
); } ``` --- ## �🔗 Hasznos Linkek - [React Router v6 Dokumentáció](https://reactrouter.com/) - [Context API Dokumentáció](https://react.dev/reference/react/useContext) - [Tailwind CSS Dokumentáció](https://tailwindcss.com/) --- **Sok sikert! 🚀**