Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

2. diel - Prvé aplikácie v React Native

V predchádzajúcej lekcii, React Native - Predstavenie frameworku , sme si popísali výhody mobilných aplikácií, inštaláciu NodeJS a Android Studia a pripravili si vývojové prostredie.

V dnešnom tutoriále si ukážeme inštaláciu React do Visual Studio Code a naučíme sa vytvoriť jednoduchú aplikáciu, na ktorej si vysvetlíme základy tvorby aplikácií za pomocou React Native.

Prvé aplikácie v React Native

Nainštalované Node.js a NPM z predošlej lekcie snáď máme. Otvoríme si príkazový riadok a navigujeme do zložky, kde budeme chcieť vytvoriť skúšobnú inštaláciu projektu. Pre zahájenie inštalácie napíšeme:

npm install -g create-react-native-app

Príkaz potvrdíme:

React Native

Potom do príkazového riadku napíšeme:

cd desktop

Tým navigujeme na plochu, kde sa bude náš projekt nachádzať (alebo surfujte do zložky, kde projekt chcete vytvoriť). Potom vytvoríme aplikáciu týmto príkazom:

create-react-native-app MyReactNative
React Native

Vytvoríme tak aplikáciu s názvom MyReactNative. Akonáhle prebehne inštalácia, tak by sme mali mať všetky súbory na ploche v priečinku MyReactNative/. Teraz len otvoríme zložku MyReactNative/ vo svojom IDE.

Voľba aplikácie

Výber projektu, na ktorom by sme si mohli demonštrovať všetko potrebné, nebol úplne jednoduchý. Nakoniec sa ale víťazom stala jednoduchá kalkulačka, ktorej screenshot môžeme vidieť nižšie:

React Native

Takže keď už vieme, v čom a čo budeme robiť, tak hurá do práce.

Vytvorenie projektu

Minule sme si ukázali úplný základ pre vytvorenie aplikácie v React Native, ale pre dnešnú aplikáciu použijeme trochu iný postup. Pre tento postup použijeme nástroj Node.js. Stačí ho mať nainštalovaný a pomocou neho spustiť jediný príkaz v priečinku, kam chceme umiestniť projekt. Ako parameter uvedieme názov projektu:

npx create-react-app calculator

To je všetko. Teraz počkáme na dokončenie inštalácie. Jednoducho si otvoríme projekt vo svojom vybranom IDE alebo textovom editore a môžeme sa pustiť do programovania:-)

Spustení aplikácie

Bolo by dobré si vyskúšať, ako vôbec aplikáciu spustiť. To čo sme nainštalovali je totiž kompletný základ React Native aplikácie:

npm start

Príkaz nám teda spustí našu aplikáciu v rámci lokálneho servera štandardne na adrese http: // localhost: 3000 / a rovno aj otvorí v predvolenom prehliadači.

Základné komponenty

Táto aplikácia kalkulačky bude potrebovať dve súčasti. Jedna je naša komponenta ResultComponent, kde zobrazujeme výstup, a druhá je KeypadComponent, kde potrebujeme zobraziť našu klávesnicu. V priečinku src/ teda vytvoríme adresár components/ a súbor komponenty ResultComponent.js, do ktorého napíšeme nasledujúci kód:

import React, {Component} from 'react-native';

class ResultComponent extends Component {


    render() {
        let {result} = this.props;
        return (
            <div className="result">
                <p>{result}</p>
            </div>
        )
        ;
    }
}

export default ResultComponent;

Tento kód len renderuje výsledok kalkulačky do príslušných HTML elementov. Komponenta sa skladá iba z jednej značky, ktorá zobrazuje obsah z rekvizít. Ďalej vytvoríme komponentu klávesnice. Naša klávesnica je len kopa tlačidiel, ktorá po kliknutí niečo robia. Toto je kód nášho súboru KeypadComponent.js:

import React, {Component} from 'react-native';

class KeyPadComponent extends Component {

    render() {
        return (
            <div className="button">
                <button name="(" onClick={e => this.props.onClick(e.target.name)}>(</button>
                <button name="CE" onClick={e => this.props.onClick(e.target.name)}>CE</button>
                <button name=")" onClick={e => this.props.onClick(e.target.name)}>)</button>
                <button name="C" onClick={e => this.props.onClick(e.target.name)}>C</button><br/>

                <button name="1" onClick={e => this.props.onClick(e.target.name)}>1</button>
                <button name="2" onClick={e => this.props.onClick(e.target.name)}>2</button>
                <button name="3" onClick={e => this.props.onClick(e.target.name)}>3</button>
                <button name="+" onClick={e => this.props.onClick(e.target.name)}>+</button><br/>

                <button name="4" onClick={e => this.props.onClick(e.target.name)}>4</button>
                <button name="5" onClick={e => this.props.onClick(e.target.name)}>5</button>
                <button name="6" onClick={e => this.props.onClick(e.target.name)}>6</button>
                <button name="-" onClick={e => this.props.onClick(e.target.name)}>-</button><br/>

                <button name="7" onClick={e => this.props.onClick(e.target.name)}>7</button>
                <button name="8" onClick={e => this.props.onClick(e.target.name)}>8</button>
                <button name="9" onClick={e => this.props.onClick(e.target.name)}>9</button>
                <button name="*" onClick={e => this.props.onClick(e.target.name)}>x</button><br/>

                <button name="." onClick={e => this.props.onClick(e.target.name)}>.</button>
                <button name="0" onClick={e => this.props.onClick(e.target.name)}>0</button>
                <button name="=" onClick={e => this.props.onClick(e.target.name)}>=</button>
                <button name="/" onClick={e => this.props.onClick(e.target.name)}>÷</button><br/>
            </div>
        );
    }
}


export default KeyPadComponent;

Pretože musíme odoslať udalosť click s informáciami o tom, na ktoré tlačidlo bolo kliknuté, zavoláme funkciu this.props.OnClick() pri každom kliknutí na tlačidlo a odovzdáme e.target.name ako argument.

Logiku tejto funkcie definujeme do našej nadradenej komponenty, čo je App.js.

Do súboru App.js, ktorý je základom všetkých našich predchádzajúcich komponentov a ktorý vykresľuje všetky hlavné komponenty, najprv zahrnieme všetky podriadené komponenty:

import React, { Component } from 'react-native';
import './App.css';
import ResultComponent from './components/ResultComponent';
import KeyPadComponent from "./components/KeyPadComponent";

class App extends Component {
    constructor(){
        super();

        this.state = {
            result: ""
        }
    }

    render() {
        return (
            <div>
                <div className="calculator-body">
                    <h1>Simple Calculator</h1>
                    <ResultComponent result={this.state.result}/>
                    <KeyPadComponent onClick={this.onClick}/>
                </div>
            </div>
        );
    }
}

export default App;

Do this.state sme zahrnuli tiež premennú result, ktorá sa odovzdá do našej komponenty pre výsledok. To nám umožní manipulovať s displejom. Premenná this.state by sa dala označiť ako triedny.

Pridanie funkcií

Všimnite si, že som this.onClick odovzdal do komponenty Keypad, ale ešte som to nedefinoval.

Pred definovaním tejto funkcie musíme urobiť niekoľko vecí. Musíme vytvoriť funkcie pre naše základné funkcie kalkulačky. V tejto kalkulačke budú tri hlavné funkcie:

  • this.Calculate() => Vypočíta výsledok nášho výrazu, ktorý sa spustí po stlačení tlačidla "=".
  • this.Reset() => Vymaže náš výstup. Funkcia sa spustí, keď stlačíme tlačidlo "C".
  • this.Backspace() => Vymaže posledný stlačený znak po kliknutí na tlačidlo "CE".

Najprv vytvoríme tieto funkcie v súbore App.js:

import React, { Component } from 'react-native';
import './App.css';
import ResultComponent from './components/ResultComponent';
import KeyPadComponent from "./components/KeyPadComponent";

class App extends Component {
    constructor(){
        super();

        this.state = {
            result: ""
        }
    }


    calculate = () => {
        try {
            this.setState({
                // eslint-disable-next-line
                result: (eval(this.state.result) || "" ) + ""
            })
        } catch (e) {
            this.setState({
                result: "error"
            })

        }
    };

    reset = () => {
        this.setState({
            result: ""
        })
    };

    backspace = () => {
        this.setState({
            result: this.state.result.slice(0, -1)
        })
    };

    render() {
        return (
            <div>
                <div className="calculator-body">
                    <h1>Simple Calculator</h1>
                    <ResultComponent result={this.state.result}/>
                    <KeyPadComponent onClick={this.onClick}/>
                </div>
            </div>
        );
    }
}

export default App;

Funkcia calculate() je oveľa jednoduchšie, než napríklad u PHP. V PHP by sme mali potrebné blok switch, kde by sme kontrolovali operátor a potom podľa toho počítali. Tu môžeme využiť funkciu eval(), ktorá vypočíta výsledok, ktorý rovno v kalkulačke naťukáme.

Nakoniec môžeme vytvoriť našu funkciu onClick() a zahrnúť ju tiež do nášho súboru App.js:

import React, { Component } from 'react';
import './App.css';
import ResultComponent from './components/ResultComponent';
import KeyPadComponent from "./components/KeyPadComponent";

class App extends Component {
    constructor(){
        super();

        this.state = {
            result: ""
        }
    }

    onClick = button => {

        if(button === "="){
            this.calculate()
        }

        else if(button === "C"){
            this.reset()
        }
        else if(button === "CE"){
            this.backspace()
        }

        else {
            this.setState({
                result: this.state.result + button
            })
        }
    };


    calculate = () => {
        try {
            this.setState({
                // eslint-disable-next-line
                result: (eval(this.state.result) || "" ) + ""
            })
        } catch (e) {
            this.setState({
                result: "error"
            })

        }
    };

    reset = () => {
        this.setState({
            result: ""
        })
    };

    backspace = () => {
        this.setState({
            result: this.state.result.slice(0, -1)
        })
    };

    render() {
        return (
            <div>
                <div className="calculator-body">
                    <h1>Simple Calculator</h1>
                    <ResultComponent result={this.state.result}/>
                    <KeyPadComponent onClick={this.onClick}/>
                </div>
            </div>
        );
    }
}

export default App;

Funkcia backspace() odstráni jedno číslo pomocou funkcie slice(). Funkcia onClick(), prečíta argument, ktorý je názov tlačidla, na ktoré bolo kliknuté. Vďaka tomu zavoláme príslušnú funkciu a tým zmeníme stav.

Nakoniec môžete pridať trochu CSS, aby kalkulačka vyzerala lepšie. Tým sme dokončili aplikáciu kalkulačku pomocou react native.

V budúcej lekcii, React Native - Promises a asynchrónne funkcie , si popíšeme asynchrónne funkcie a promises a ich využitie.


 

Predchádzajúci článok
React Native - Predstavenie frameworku
Všetky články v sekcii
React Native
Preskočiť článok
(neodporúčame)
React Native - Promises a asynchrónne funkcie
Článok pre vás napísal Matěj Plšek
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Jmenuji se Matěj Plšek, programování se věnuji už několik let. Věnuji se momentálně nejvíce JavaScriptu, hardwaru a C#.
Aktivity