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.
Viac informacií preberáme na kurze: