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

7. diel - Kalkulačka v React - Tvorba komponentov

V minulej lekcii, Kalkulačka v React - Projekt a rozdelenie na komponenty, sme vytvorili základ pre prvú jednoduchú kalkulačku za použitia knižnice React.

V tomto React tutoriále si postupne vytvoríme komponenty na zadanie čísla, vypísanie výsledku a pre formulár kalkulačky.

Komponent pre zadávanie čísla - NumberInput.js

V novom priečinku src/calculator/ vytvoríme súbor NumberInput.js, ktorý bude naším komponentom pre číselný vstup:

Komponent NumberInput v React - Základy React

Bude teda vykresľovať elementy <input>, <label> a obsluhovať udalosť zmeny čísla vo vstupnom poli. Kód komponentu bude nasledovný:

function NumberInput({ name, label, value, onChange }) {
    return (
        <label htmlFor={name}>
            {label}
            <input onChange={onChange}
                id={name}
                value={value}
                type="number"
                name={name}
                required
            />
        </label>
    );
}

export default NumberInput;

Výhodou tohto komponentu je, že si generuje aj <label> a nastavuje atribúty, ktoré by sme inak museli nastavovať pre každé zadanie čísla v aplikácii znova.

Hneď v deklarácii funkcie komponentu sme si deštrukturalizovali vlastnosti. Tie komponentu nastavíme, až ho budeme vkladať do komponentu kalkulačky. Sú to:

  • name - názov číselného vstupu,
  • label - text popisku číselného vstupu,
  • value - zadaná hodnota,
  • onChange - funkcia, ktorú komponent zavolá pri zmene hodnoty.

Ďalej vraciame výsledný HTML kód komponentu, ktorý je rozpísaný na viac riadkov a preto je zapísaný v zátvorkách (). Tiež si všimnite, že je celý HTML kód uzavretý v jedinom HTML elemente (tu <label>), inak by totiž JSX zápis nebol validný.

Možno ste si tiež všimli, že namiesto atribútu for pre <label> používame htmlFor. To preto, že keď mixujeme HTML priamo do JavaScriptu, nesmieme zabudnúť, že for je v JS rezervované ako kľúčové slovo pre cyklus. JSX teda namiesto neho zavádza náhradu, ktorá sa do výsledného HTML preloží správne ako HTML atribút for. Ten, ako vieme, určuje, ku ktorému formulárovému prvku je štítok (<label>) viazaný. Tu by sme ho ani zadávať nemuseli, pretože vstupné pole je vložené priamo v labeli, ale ukázali sme si, ako sa v JSX zapisuje.

Komponent pre zobrazenie výsledku - Result.js

V priečinku src/calculator/ vytvoríme ďalší súbor, Result.js, ktorý bude komponentom pre výsledok:

Súčasť Result - Základy React

Výsledok si zobrazíme jednoducho v elemente <div>. Kód komponentu bude nasledovný:

function Result({ value }) {
    if (value !== null)
        return <div className="Result">Result: {value}</div>;
    return null;
}

export default Result;

Výsledok má len jednu vlastnosť a tou je vypisovaná hodnota.

Keďže ďalej budeme chcieť na výsledok aplikovať CSS, pridáme mu HTML atribút class. Avšak opäť sa jedná v JS o rezervované slovo, takže v JSX namiesto toho použijeme atribút className, ktorý sa potom vyrenderuje ako atribút class. Ten sa tiež používa v súvislosti s označením samotných komponentov, a preto za účelom prehľadnosti zvolíme rovnaký názov CSS triedy, ako je názov komponentu.

Ďalej stojí za povšimnutie, že v komponente vraciame null, pokiaľ výsledok nie je zadaný a my nič nevyrenderujeme. Ak komponent nemá nič vykresliť, mal by vracať null - predsa len nejakú hodnotu vracať musí.

Komponent s formulárom kalkulačky - CalculatorForm.js

Teraz, keď už máme príslušné súčasti, môžeme vytvoriť centrálny komponent aplikácie - formulár CalculatorForm.js. Súbor opäť vytvoríme do podpriečinka calculator/ v src/. Formulár s kalkulačkou bude tvorený elementom <form>. Ďalej bude obsahovať nami vyššie vytvorené komponenty a samozrejme odosielacie tlačidlo typu submit, aby sa formulár dal odoslať:

Vzhľad formulára kalkulačky - Základy React

Kód komponentu bude nasledovný:

import NumberInput from "./NumberInput";
import Select from "react-select";
import Result from "./Result";

function CalculatorForm() {
    return (
        <div>
            <form className="CalculatorForm">
                <NumberInput name="a" label="First number:" />
                <NumberInput name="b" label="Second number:" />
                <Select options={[]} />
                <input type="submit" value="Calculate" />
            </form>
            <Result />
        </div>
    );
}

export default CalculatorForm;

Potrebné komponenty sme na začiatku súboru naimportovali.

Pri vykreslení formulára vidíme krásne a jednoduché zloženie React aplikácie z komponentov, ktoré sme vytvorili pred chvíľou. Všimnite si, že sme pri vložení našich komponentov do formulára nastavili niektoré ich vlastnosti. Zvyšok vlastností, napr. hodnota čísel alebo výsledok, sa bude nastavovať podľa stavov kalkulačky, ktoré pridáme ďalej v kurze. Vidíme tu aj použitie komponentu <Select />, ktorý sme pri založení projektu naimportovali. Selectu sme nastavili jeho možnosti options zatiaľ na prázdne pole [], možnosti na výber dodáme opäť neskôr v priebehu kurzu.

Komponent celej aplikácie - src/App.js

Nakoniec teda upravíme samotný komponent našej aplikácie. Odmažeme zbytočné zvyšky východiskovej React šablóny a vložíme sem náš formulár s kalkulačkou:

import CalculatorForm from "./calculator/CalculatorForm";
import './App.css';

const title = "React calculator";

const App = () => {

    return (
        <div className="App">
            <h1>{title}</h1>
            <CalculatorForm />
        </div>
    );
}

export default App;

Opäť nič zložité. Jediná zaujímavá vec v kóde je nastavenie hodnoty nadpisu cez konštantu pomocou syntaxe {}, a je to opäť veľmi priamočiare.

A to je všetko. Keď si teraz spustíme aplikáciu, v prehliadači sa zobrazí zodpovedajúca HTML štruktúra:

Aktuálný vzhľad formulára kalkulačky - Základy React

V budúcej lekcii, Kalkulačka v React - Utility funkcie a stavy, sa naučíme používať utility funkcie a definujeme stavy našej aplikácie pomocou React hooku useState().


 

Mal si s čímkoľvek problém? Zdrojový kód vzorovej aplikácie je k stiahnutiu každých pár lekcií. Zatiaľ pokračuj ďalej, a potom si svoju aplikáciu porovnaj so vzorom a ľahko opráv.

Predchádzajúci článok
Kalkulačka v React - Projekt a rozdelenie na komponenty
Všetky články v sekcii
Základy React
Preskočiť článok
(neodporúčame)
Kalkulačka v React - Utility funkcie a stavy
Článok pre vás napísal Jindřich Máca
Avatar
Užívateľské hodnotenie:
4 hlasov
Autor se věnuje převážně webovým technologiím, ale má velkou zálibu ve všem vědeckém, nejen ze světa IT. :-)
Aktivity