Správa stavov (state management) je jednou z najdôležitejších súčastí vývoja aplikácií v Reacte. Každá interaktívna webová aplikácia si vyžaduje správu údajov, ktoré sa môžu meniť v čase. V tomto článke vám ukáže, ako efektívne pracovať so stavom v React aplikáciách, od základných až po pokročilé techniky.
Stav v Reacte predstavuje údaje, ktoré sa môžu meniť počas životného cyklu komponentu. React umožňuje pracovať so stavom na úrovni jednotlivých komponentov aj na globálnej úrovni.
Efektívna správa stavov umožňuje:
Najjednoduchší spôsob správy stavu je použitie useState
, ktorý uchováva stav priamo v komponente.
import { useState } from "react"; function Pocitadlo() { const [pocet, setPocet] = useState(0); return ( <div> <p>Počet kliknutí: {pocet}</p> <button onClick={() => setPocet(pocet + 1)}>Klikni</button> </div> ); }
Vysvetlenie:
useState
definuje stavovú premennú pocet
a funkciu setPocet
na jej aktualizáciu.pocet
o 1.Ak je stav aplikácie zložitejší, odporúča sa použiť useReducer
, ktorý funguje podobne ako Redux.
import { useReducer } from "react"; const reducer = (state, action) => { switch (action.type) { case "increment": return { count: state.count + 1 }; case "decrement": return { count: state.count - 1 }; default: return state; } }; function Pocitadlo() { const [state, dispatch] = useReducer(reducer, { count: 0 }); return ( <div> <p>Počet: {state.count}</p> <button onClick={() => dispatch({ type: "increment" })}>+1</button> <button onClick={() => dispatch({ type: "decrement" })}>-1</button> </div> ); }
Kedy použiť useReducer
?
Ak potrebujete spravovať stav medzi viacerými komponentmi, môžete použiť React Context API. Context umožňuje zdieľať dáta medzi komponentmi bez nutnosti preposielať ich cez props.
import { createContext, useState, useContext } from "react"; const TemaContext = createContext(); function TemaProvider({ children }) { const [tema, setTema] = useState("svetlá"); return ( <TemaContext.Provider value={{ tema, setTema }}> {children} </TemaContext.Provider> ); } function Tlacidlo() { const { tema, setTema } = useContext(TemaContext); return ( <button onClick={() => setTema(tema === "svetlá" ? "tmavá" : "svetlá")}> Zmeniť tému </button> ); } function App() { return ( <TemaProvider> <Tlacidlo /> </TemaProvider> ); }
Pre veľké aplikácie je výhodné použiť Redux, ktorý centralizuje správu stavu.
useState
a kedy useReducer
?Ak máte jednoduchý stav, použite useState
. Ak je stav komplexnejší, odporúča sa useReducer
.
Nie. Pre menšie aplikácie stačí useContext
alebo useState
.
Používajte useMemo
a useCallback
na optimalizáciu výkonu.
Ak máte záujem o prezenčné alebo online školenie programovania, pozrite si našu ponuku na www.like-it.sk. Naše kurzy vedú skúsení odborníci, ktorí vám pomôžu zvládnuť základy aj pokročilé koncepty programovania.