Ebben a bejegyzésben a React komponensek alapvető előnyeit és a statikus komponensek létrehozását fogjuk megtekinteni.
Előzmények: a react telepítésén már túl vagyunk, úgyhogy innen tudjuk folytatni az ismerkedést, akár úgy, hogy a Laravel-lel együtt használjuk, akár úgy, hogy egy új React projektet hozunk létre (itt most ez utóbbi történik majd meg).
Ez egy úgynevezett Single-Page Application (SPA), amit lehet akár clone-ozni is, mert ebben fogjuk elvégezni az alábbi (és közeljövőbeli) fejlesztéseket. Aki kicsit jobban át szeretné látni, hogy mi is a különbség a hagyományos webes alkalmazások és az SPA-k között, annak ezt a videót ajánlom:
Ezekután indítsuk is el az alkalmazásunkat:
npm start
Ezután, ha bármilyen módosítást hajtunk majd végre a fájljainkban és mentjük őket, akkor egyből frissülni is fog a böngészőben a http://localhost:3000-es webcímen a projektünk. A böngészőben ezt kell látnunk:
Mi is az a komponens?
A komponensek lehetővé teszik számunkra, hogy a felhasználó által látott felület egyes elemeit újra felhasználhassuk, és segítik, hogy ezeket külön, a többitől elzártan tudjuk kezelni. Alapvetően a komponensek úgy működnek, mint a Javascript függvények. Lehet nekik bemenetként (input) adatokat adni, melyeket "prop"-nak (ezekről a jövőben lesz szó) hívunk és a React a "függvényből" egy leírást ad vissza, hogy mi jelenjen meg a képernyőn.
Komponenst létrehozni két módon is lehetséges: function és class formában is. Elsőnek megnézzük, hogy is néz ki maga a komponens létrehozása mind a két megoldással.
Function formában az alábbi módon hozható létre egy olyan komponens, mely még statikus, azaz a megjelenítéséhez nem kell külső adat és így nem is függ tőlük:
functionfirst(){return(<div>
Üdvözöllek az első komponensednél
</div>)}exportdefault first
Ugyanez a komponens megoldása class formában az alábbi módon valósítható meg:
classFirstextendsReact.Component{render(){return(<h1>
Én vagyok az első komponensed!</h1>);}}
A React fejlesztők a lehető legtöbb esetben a function komponens formáját használják a jövőben tanulandó Hook-ok és State-ek miatt. Így a jövőben előszeretettel használjuk ezt mi is. Viszont nem mehetünk el a két módszer összehasonlítása mellett sem, így az alábbi táblázatba összeszedtem egyszerűsítve a különbségeket nektek.
Funkcionális komponensek
Osztály alapú komponensek
A funkcionális komponens alapvetően egy egyszerű Javascript function, mely elfogad változókat argumentumként és egy React elemet ad vissza végül.
Az osztály alapú komponenst mindig a React-ból származtatjuk. Kell hozzá egy render metódus és ez fogja visszaadni a React elemet végül.
Itt nem található meg a render metódus.
Kötelező a render() metódus amely egy JSX-et fog (szintaktikailag azonos a HTML-lel)
Állapot nélküli komponensenként is ismertek, mivel egyszerűen elfogadják az adatokat, és valamilyen formában megjelenítik azokat, amelyek elsősorban a felhasználói felület megjelenítéséért felelősek.
Állapottartó összetevőkként is ismertek, mivel logikát és állapotot valósítanak meg.
A React életciklus-módszerek (például a componentDidMount) nem használhatók funkcionális komponensekben.
A React életciklus metódusok osztály összetevőkön belül használhatók (például a componentDidMount).
A hookok könnyen használhatók funkcionális alkatrészekben, hogy állapotszerűvé tegyék őket. Példa:
const [name,SetName] = React.useState(' ')
Különböző szintaxist igényel egy osztály komponensen belül a hook megvalósításához. Példa:
constructor(props) {
super(props);
this.state = { name: ' ' }
}
Konstruktorokat nem használnak.
A konstruktort úgy használják, ahogyan az állapotot tárolni kell.
Hasznos kiegészítő VSCode-hoz
Mielőtt belekezdenénk a React-os munkába, előtte érdemes telepítenünk ezt a kiegészítőt a VSCode-hoz, mert megkönnyítheti a munkánkat: ES7+ React/Redux/React-Native snippets (több mint 5 millióan telepítették már).
Néhány példa
Bevezetőnek hoztam egy egyszerű példát a statikus komponens létrehozására. Hozzunk létre egy egyszerű "kártya" komponenst, amely üdvözöl az oldalon. Első lépésként hozzunk létre egy JSX fájl-t a src/components mappában. Ezt az alábbi módon tehetjük meg:
Legyen a neve: card.jsx (ha szükséges, hozzuk létre előtte az src mappában a components mappát is).
Ha a fájlon belül a "rafce" szöveget beírjuk és egy TAB-ot nyomunk a program legenerálja nekünk az alap function alapú komponens-t. Majd az alább kódot írjuk meg:
import React from'react'constCard=()=>{return(<div><h1>Statikus komponens</h1><span>Én vagyok az első komponensed!</span><button>Komponens gombja</button></div>)}exportdefault Card
Itt látható, hogy az összes HTML tudást fel lehet használni, amelyet már ismerünk.
Egyelőre még nem jelenik meg az oldalon mentés után, mivel nem importáltuk be a fő fájlba (src/App.js), és nem adtuk hozzá a return metódushoz a Card koponenst.
Ilyenkor az alábbi fájlt relatív címzéssel érjük el az aktuális komponens fájljában, illetve a fentebb említett módon érjük el a class-okat (figyeljünk a div és a button tag-ek className attribútumára):
import React from'react';import'../css/card.css';constCard=()=>{return(<div className="card"><h1>Statikus komponens</h1><span>Én vagyok az első komponensed!</span><button className="gomb">Komponens gombja</button></div>)}exportdefault Card
Nagyszerű, már tudunk saját statikus komponenst létrehozni, és kedvünk szerint design-olni, amelyet bármennyiszer, bárhol meg tudunk jeleníteni!
Nincs más hátra, mint akár saját ötlet alapján pár feladatot megvalósítani a következő blog bejegyzésig, ahol már a dinamikus komponensek létrehozását (külső adatok megjelenítése egy-egy komponensben) fogjuk átvenni... tartsatok velünk!
Az itteni módosítások ebben a Github commit-ben érhetők el.