Komponenta » Historie » Verze 14
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 | 14 | Jiří Trefil | <pre><code class="react"> |
20 | 13 | Jiří Trefil | 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> |