Místní stav patří jediné součásti (nebo malému podstromu) a není potřebný jinde. Globální stav je sdílen mezi mnoha, často vzdálenými součástmi v celé aplikaci.
Místní stav — omezený na jednu součást
() {
[query, setQuery] = ();
;
}
Místní stav patří jediné součásti (nebo malému podstromu) a není potřebný jinde. Globální stav je sdílen mezi mnoha, často vzdálenými součástmi v celé aplikaci.
() {
[query, setQuery] = ();
;
}
Místní stav se nachází v součásti (useState, ref, data()). Příklady: hodnoty vstupů, zda je rozbalovací nabídka otevřena, stav přejíždění, návrh formuláře. Žádná jiná součást se o to nestará.
// the logged-in user is needed by the navbar, profile page, settings, checkout...
const user = useUserStore(s => s.user); // from a global store/context
Globální stav jsou data, která musí číst nebo aktualizovat konzistentně mnoho nesouvisejících součástí: ověřený uživatel, motiv, nákupní košík, upozornění na úrovni aplikace. Nachází se v Context, store (Redux/Zustand/Pinia) nebo podobně.
Ask: "How many components need this, and how far apart are they?"
One component (or parent+child) → LOCAL state
Many unrelated components / whole app → GLOBAL state
// ❌ putting a single form's input in global state — unnecessary complexity
globalStore.setFormInput(value);
// ✅ keep it local — only this form uses it
const [value, setValue] = useState("");
Udělat vše globálním přidá boilerplate, spojí součásti a může poškodit výkon (více opětovného vykreslování). Nejlepší praxe je udržovat stav co nejlokalněji, a na globální stav sáhnout pouze tehdy, když to sdílení skutečně vyžaduje.
Volba mezi místním a globálním stavem je jedním z nejdůležitějších rozhodnutí o stavu.
Udržování stavu místního drží součásti jednoduché, samostatné a výkonné; uchýlení se k globálnímu stavu pouze tehdy, když jsou data skutečně sdílená, se vyhýbá zbytečné složitosti.
Častý anti-pattern — vložit vše do globálního store "jen pro jistotu" — vede k nafouklým, pevně vázaným aplikacím.
Vedoucí pravidlo: lokalizujte ve výchozím stavu, globalizujte pouze když to sdílení vyžaduje.