Projekt

Obecné

Profil

Komponenta » Historie » Verze 13

Jiří Trefil, 2023-03-26 20:28

1 1 Jiří Trefil
h1. Komponenta
2
3 2 Jiří Trefil
Jak již bylo řečeno, komponenty jsou základní stavební kámen React aplikací. Komponenty by měly dodržovat *single responsibility principle* - pokud je komponenta moc složitá a dělá moc věcí, je k zamyšlení, zda se nedá rozlámat do více nezávislých komponent. Definitivně je nutné se *vyvarovat* návrhu "božských komponent", které dělají všechno.
4
5
Každá komponenta má svůj *lifecycle*. Je to podobné jako aktivitě v nativních android/ios aplikacích. Popis zde je pouze výtažek z oficiální dokumentace, pro více detailu ofiko dokumentace: (TODO viz -> reactjs).
6
Existují tři hlavní fáze:
7 4 Jiří Trefil
8 5 Jiří Trefil
 * *Mounting*
9 9 Jiří Trefil
> Množina metod, která se volá, když je komponenta "mountována", tedy její obsah je vepsán do DOMu. Od Reactu 16+ a nástupu funkcionálního paradigmatu jsou tyto funkce de facto *nahrazeny hooky* (*useEffect*), který je volán ve stejných momentech jako původní metody nad objekty. S vyjímkou metody *render()*, kterou *musí* každá komponenta obsahovat a vrací samotný JSX kód.
10 12 Jiří Trefil
 
11
* *Updating*
12 1 Jiří Trefil
> Stav, kdy je komponenta aktualizována (překreslena). Komponenta je aktualizována, pokud dojde ke změně v jejím *state* (stavu) nebo v jejích *props* (vlastnotech). 
13 12 Jiří Trefil
 
14
* *Unmouting*
15 11 Jiří Trefil
> Stav, kdy je komponenta odebrána z DOMu. Obsahuje pouze jednu metodu, ta se zavolá před samotným odebráním. Ve funkcionálním paradigmatu se opět zavolá *useEffect hook*. 
16 13 Jiří Trefil
17
Následující code snippet reprezentuje triviální komponentu - HTML tlačítko.
18
19
<pre><code class="javascript">
20
import React from "react";
21
//Komponenta reprezentujici tlacitko v HTML
22
const Button = (props:{ className:string, text:string, id:string})=>{
23
24
    //trida, kterou tlacitko dostane - pro chyceni CSS pravidel
25
    const className = props.className;
26
    //text, ktery v sobe tlacitko bude mit
27
    const text = props.text;
28
    // identifikator elementu
29
    const id = props.id;
30
    //samotne vraceni tlacitka v JSX syntaxi (babel provadi preklad)
31
    return (
32
    <button type={"submit"} className={className} id={id}>{text}</button>
33
    )
34
}
35
36
//Modulove orientovane - vyexportujeme celou funkci, aby komponentu bylo mozne pouzit
37
export default Button;
38
</code></pre>