Az alap React alkalmazásunkban az App komponens így nézett ki. Van egy App() füvvényünk, ami egy egyes szintű címsort jelenít meg. Ha nem akarunk semmit megjeleníteni, használhatjuk a null elemet a return-ben.
|
1 2 3 4 5 |
function App() { return <h1>Hello World</h1> } export default App |
Alapvetően ha több elemet is használni szeretnénk, akkor tegyük bele őket egy fragment-be (üres tag-be)! Használhatjuk konkrétan a <Fragment> taget is, de akkor importálni kell! Tehát sokkal egyszerűbb simán üres taget használni.
Hogyan lehet jsx-ben kommentet használni? Így: {/* Komment */}
import { Fragment } from ‘react’;
|
1 2 3 4 5 6 7 8 9 10 11 |
function App() { return ( <> <h1>React komponensek használata</h1> <h2>Címsor kettő, jó ez a React</h2> {/* Komment */} </> ) } export default App |
Hogyan jelenítsük meg a tartalmat az index.html-ben? Nem muszáj az App.jsx-et és a main.jsx-et is használni, beletehetnénk a tartalmunkat közvetlenül a main.jsx-be is! De ezt nem szoktuk, mert több komponens esetén átláthatatlan lesz a kód.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
import React from 'react' import ReactDOM from 'react-dom/client' function App() { return <h1>React komponens példa</h1> } ReactDOM.createRoot(document.getElementById('root')).render( <React.StrictMode> <App /> </React.StrictMode>, ) |
Több komponens használata
Készítsünk egy új fájlt az src mappában, TesztKomponensek.jsx néven! Ennek tartalmát kell importálni az app.jsx-be, majd a return-ben meghívni.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
export default function TesztKonponensek() { return ( <> <KomponensEgy /> <KomponensKetto /> <KomponensHarom /> </> ); } function KomponensEgy() { return <p> Első komponensünk. </p>; } function KomponensKetto() { return <p> Második komponensünk. </p>; } function KomponensHarom() { return <p>Harmadik komponensünk.</p>; } |
Nézzük az app.jsx-et:
|
1 2 3 4 5 6 7 8 9 10 11 |
import TesztKomponensek from './TesztKomponensek.jsx'; function App() { return ( <> <TesztKomponensek /> {/* Komment */} </> ) } export default App |
Változó, mint komponens
jsx-ben akár egy változó is lehet egy komponens!
|
1 2 3 4 |
function App() { const valtozo= <h1>Ilyet is lehet?</h1> return valtozo } |
Változó kiíratásánál { } zárójelet kell használni. pl: adjunk egy css osztályt az egyik bekezdésnek, amibe ráadásul egy változó tartalmát írjuk ki! Jsx-ben a class foglalt utasítás neve, ezért className-et használunk!
|
1 2 3 |
const lowercaseClass = 'text-lowercase'; const szoveg= 'Formázott szöveg'; const App = <p className={lowercaseClass}>{szoveg}</p>; |
Nézzünk meg egy bonyolultabb példát! Jelenítsük meg egy listában egy tömb elemeit! A map függvényt hazsnáljuk, hogy végigmenjünk a tömb elemein. Minden elemnek szükséges adni egy kulcsot, amivel a React a gyermek elemeket azonosítani tudja. (ha később pl. szeretnénk egy lista elemet törölni, módosítani…)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
function Dolgozoink() { const dolgozok = [ { id: 1, nev: 'István', munkaKor: 'Web Developer' }, { id: 2, nev: 'János', munkaKor: 'Web Designer' }, { id: 3, nev: 'Elek', munkaKor: 'Team Leader' }, ] return ( <> <p>Munkatársaink:</p> <ul> { dolgozok.map(function(dolgozo, index){ return ( <li key={index}> Név: {dolgozo.nev} munkakör: {dolgozo.munkaKor} </li> ) }) } </ul> </> ) } |
Props (properties)
A React props a komponensek közötti adatátadásra szolgál. A props tartalmazhat adatokat, függvényeket is. Az első példában egy szülőkomponens adatokat ad át egy gyermekkomponensnek. Ezek az adatok csak olvashatók a gyermekkomponens számára, tehát nem módosíthatók. (immutable).
|
1 2 3 4 5 6 |
function SzuloKomponens() { return <GyermekKomponens uzenet="Helló, React!" />; } function GyermekKomponens(props) { return <h1>{props.uzenet}</h1>; } |
Ennek a kódnak az eredménye: Helló, React!
Olvashatóbb, áttekinthetőbb, ha destructuring-ot használunk:
|
1 2 3 4 5 6 |
function SzuloKomponens() { return <GyermekKomponens uzenet="Helló, React!" />; } function GyermekKomponens({ uzenet }) { return <h1>{uzenet}</h1>; } |
Props, default (alapértelmezett) értékkel. Lehetőség van alapértelmezett értéket megadni. Tehát a SzuloKomponensben simán hívjuk meg, paraméter nélkül, akkor az alapértelmezett prop kerül kiírásra: Nincs üzenet.
|
1 2 3 4 5 6 7 8 9 10 11 |
function SzuloKomponens() { //return <GyermekKomponens uzenet="Helló, React!" />; return <GyermekKomponens />; } function GyermekKomponens({ uzenet }) { return <h1>{uzenet}</h1>; } GyermekKomponens.defaultProps = { uzenet: "Nincs üzenet", }; |
Ha a props fügvény, akkor lehetőség van a gyermek komponensből a szülő kompponensnek eseményt visszaküldeni. Tehát itt a a szülő komponens eseménykezelője fut le:
|
1 2 3 4 5 6 7 8 |
function SzuloKomponens() { const kezelo = () => alert("Esemény történt!"); return <GyermekKomponens onClick={kezelo} />; } function GyermekKomponens({ onClick }) { return <button onClick={onClick}>Kattints rám!</button>; } |
Komponens állapota – state
Egy komponensnek lehet állapota, képes pl. adatokat tárolni. Az állapot kezelésére a React useState() függvényét használjuk.
|
1 2 3 4 5 6 |
import { useState } from 'react' function SzuloKomponens() { const [nev, setNev] = useState('János') return <h1>Hello {nev}</h1> } |
Egészítsük ki egy gombbal a kódot! A gomb lenyomására meghívjuk a setName() függvényt.
|
1 2 3 4 5 6 7 8 9 |
function Teszt() { const [nev, setNev] = useState('Elek') return ( <> <h1>Hello {nev}</h1> <button onClick={() => setNev('Béla')}>Név csere!</button> </> ) } |
Nézzünk egy másik példát! Generáljunk gombnyomásra 1-100 közötti random számot! A random szám értékét a setVeletlenSzam állapot módosító függvénnyel tudjuk beállítani. Jsx-ben nyugodtan használhatunk inline css-t is, nézzünk is meg. Annyi a megkötés, hogy dupla kapcsos zárójelet kell használni hozzá!
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import React, { useState } from 'react'; function RandomSzam() { // inicializálás, VeletlenSzam értéke 0 const [VeletlenSzam, setVeletlenSzam] = useState(0); // Véletlenszám generáló függvény const szamGeneralas = () => { const szamUj = Math.floor(Math.random() * 100) + 1; // 1 és 100 között setVeletlenSzam(szamUj); // Állapot frissítése }; return ( <div style={{ textAlign: 'center', marginTop: '50px' }}> <h1>Véletlenszám: {VeletlenSzam}</h1> <button onClick={szamGeneralas} style={{ padding: '10px 20px', fontSize: '16px' }}> Generálj új számot </button> </div> ); } export default RandomSzam; |
