IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

4. diel - Vlastnosti v React - Props

V minulej lekcii, Prvý React komponent - Hello World, sme si vytvorili prvý React komponent HelloWorld, ktorý do stránky vložil nadpis <h1>.

V dnešnom React tutoriále si vysvetlíme koncept vlastností props. Ukážeme si, ako sa vlastnosti zadávajú v HTML kóde pri vytváraní komponentu, načítajú v komponente a deštrukturalizujú . Naučíme sa tiež zadávať predvolenú hodnotu vlastností. Budeme pokračovať s naším projektom helloworld.

Vlastnosti v React

Na konfiguráciu a odovzdávanie dát do komponentov v React slúžia vlastnosti (properties). Vlastnosti React komponentom definujeme ako HTML atribúty v JSX kóde pri ich vytváraní.

Nastavenie vlastností

Náš pozdrav zatiaľ robí vždy to isté. Poďme ho upraviť tak, aby bolo možné nastaviť meno toho, koho bude zdraviť. Meno nastavíme práve cez React vlastnosť. Pomenujeme ju napr. name a v súbore App.js ju komponentu <HelloWorld> nastavíme jednoducho ako HTML atribút:

<HelloWorld name="William" />

Najväčšou pridanou hodnotou je teraz samozrejme to, že všetky pozdravy nebudú robiť to isté, keď v nich vlastnosť spracujeme a vypíšeme. Môžeme si rovno pod pozdrav vložiť ešte jeden, ktorý bude zdraviť niekoho iného. Celý kód súboru App.js bude teraz vyzerať takto:

import './App.css';
import HelloWorld from './HelloWorld.js';

function App() {
  return (
    <div className="App">
         <HelloWorld name="William" />
         <HelloWorld name="Sophia" />
    </div>
  );
}

export default App;

Súbor uložíme.

Vlastnosťami odovzdávame ľubovoľné dáta z rodičovského komponentu (tu App) na potomkov (tu HelloWorld). Komponent nemôže zmeniť svoje vlastnosti, ale môže nastaviť vlastnosti svojim potomkom. Je to podobný princíp, ako keď odovzdávame parametre funkciám v JavaScripte. Pomocou vlastností obvykle ovplyvňujeme, čo/ako (sa) má komponent zobraziť.

Načítanie vlastností v komponente - objekt props

Presunieme sa do súboru komponentu HelloWorld.js. Aby sme mali k vlastnostiam komponentu prístup, pridáme si najprv do deklarácie funkcie HelloWorld() parameter props:

function HelloWorld(props) {

Všetky vlastnosti zadané do HTML atribútov na mieste vytvárania komponentu máme teraz vo vnútri komponentu k dispozícii ako vlastnosti objektu props. Poďme meno vypísať ako časť pozdravu. Kompletný kód komponentu bude teraz nasledujúci:

function HelloWorld(props) {
    const name = props.name;
    return <h1>Hi {name}!</h1>
}

export default HelloWorld;

Vlastnosť sme si pre prehľadnosť najprv uložili do samostatnej konštanty. Ak by mal HTML kód komponentu 100 riadkov, určite by sme uvítali, že sú všetky potrebné vlastnosti takto deklarované hneď na začiatku.

Výrazy do JSX kódu vkladáme pomocou zložených zátvoriek {}. Súbor uložíme.

Možno vám napadlo, že z hľadiska OOP ide v komponente o podobný princíp, ako obstaráva konštruktor.

Keď sa teraz pozrieme na stránku v prehliadači, vidíme, že sú tu komponenty s pozdravom naozaj dva a vypisujú pozdrav podľa hodnoty vo vlastnosti name:

React App
localhost:3000

Aplikácia s viacerými vlastnosťami

V App.js pridáme obom komponentom <HelloWorld> ešte vlastnosť text, ktorá umožní meniť text pozdravu:

<HelloWorld text="Hi" name="William" />
<HelloWorld text="Hello" name="Sophia" />

Následne sa presunieme do HelloWorld.js, kde túto vlastnosť vypíšeme ako text pozdravu:

function HelloWorld(props) {
    const text = props.text;
    const name = props.name;
    return <h1>{text} {name}!</h1>
}

export default HelloWorld;

Aplikácia teraz vyzerá takto:

React App
localhost:3000

Deštrukturalizácia React vlastností

Keď je vlastností väčšie množstvo, zaberie ich preuloženie z objektu props do konštánt niekoľko riadkov kódu. Preto si ich môžeme nechať "vybaliť" automaticky pomocou tzv. deštrukturalizácie objektov, ktorú JavaScript podporuje:

function HelloWorld(props) {
    const { text, name } = props;
    return <h1>{text} {name}!</h1>
}

export default HelloWorld;

Do kódu sme vložili výraz, kde:

  • na ľavej strane definujeme všetky konštanty na vybalenie v zložených zátvorkách {} a
  • na pravej strane nastavujeme objekt, z ktorého sa majú vlastnosti s týmito názvami "vybaliť".

Aplikácia teraz funguje úplne rovnako, všetky vlastnosti sme však získali ako samostatné konštanty na jednom riadku.

Deštrukturalizácia parametra

Pokiaľ vlastností nie je veľa, môžeme ich vybaliť priamo v parametri funkcie a kód ešte skrátiť:

function HelloWorld({ text, name }) {
    return <h1>{text} {name}!</h1>
}

export default HelloWorld;

K objektu props v tomto prípade vôbec nepotrebujeme pristupovať. Tento zápis budeme preferovať, ak nebude vlastností veľké množstvo (riadok by bol potom veľmi dlhý).

Predvolené hodnoty vlastností

Vďaka tomuto zápisu môžeme tiež veľmi jednoducho nastaviť predvolené hodnoty vlastností pre prípad, že v HTML kóde nebudú zadané. Prejdime do App.js a vlastnosť text nastavme len jednému komponentu:

<HelloWorld name="William" />
<HelloWorld text="Hello" name="Sophia" />

Následne v HelloWorld.js nastavíme predvolenú hodnotu vlastnosti text na "Hi":

function HelloWorld({ text = "Hi", name }) {
    return <h1>{text} {name}!</h1>
}

export default HelloWorld;

Výsledok je stále rovnaký, pre vlastnosť text sa v prípade prvého komponentu použila zadaná východisková hodnota:

React App
localhost:3000

Týmto máme náš projekt helloworld hotový a nabudúce začneme zas tvoriť niečo nové.

Ak si budete sťahovať hotový projekt z prílohy, majte na pamäti, že je potrebné v jeho priečinku najprv spustiť príkaz npm install pre stiahnutie potrebných nástrojov. Až potom ho možno spustiť pomocou npm start.

V budúcej lekcii, Stavy v React a hook useState(), sa naučíme obsluhovať stavy našej aplikácie, objavíme React hooks a naučíme sa pracovať s useState().


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 3x (177.13 kB)
Aplikácia je vrátane zdrojových kódov v jazyku JavaScript

 

Predchádzajúci článok
Prvý React komponent - Hello World
Všetky články v sekcii
Základy React
Preskočiť článok
(neodporúčame)
Stavy v React a hook useState()
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
3 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity