Jak zjednodušit stav v Reduxu při práci s async akcemi

From Rikkiepedia
Revision as of 17:59, 21 August 2026 by RoxannaOglesby5 (talk | contribs) (Created page with "Druhým častým problémem je formátování. Pokud máte v jednom projektu Python a JavaScript, každý má jiný standard (například PEP 8 a Prettier). V nastavení IDE si pro každý jazyk definujte příslušný formátovač a zapněte „format on save". Pozor na konflikt s automatickým importem – často se stává, že IDE vloží import z jiného jazyka, což způsobí chybu. Řešením je zakázat automatické importy v souborech, které nepatří do danéh...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Druhým častým problémem je formátování. Pokud máte v jednom projektu Python a JavaScript, každý má jiný standard (například PEP 8 a Prettier). V nastavení IDE si pro každý jazyk definujte příslušný formátovač a zapněte „format on save". Pozor na konflikt s automatickým importem – často se stává, že IDE vloží import z jiného jazyka, což způsobí chybu. Řešením je zakázat automatické importy v souborech, které nepatří do daného jazyka.

Začněte u struktury projektu. Vytvořte si oddělené adresáře pro každý jazyk, například src/backend pro Python a src/frontend pro TypeScript. Většina moderních IDE (Visual Studio Code, IntelliJ IDEA, PyCharm) umožňuje přiřadit jednotlivým složkám jiný interpret nebo překladač. V nastavení projektu najdete sekci „Languages & Frameworks" a tam si pro každý kořenový adresář definujete SDK, linter i formátovač. Tento krok je zásadní, protože IDE pak automaticky použije správné nástroje, aniž byste museli přepínat profily.

Při práci s asynchronními akcemi se často zapomíná na správu tzv. race conditions. Když uživatel spustí více požadavků najednou, může se stát, že starší odpověď dorazí později a přepíše novější data. Řešením je použití identifikátoru požadavku, který si uložíte do stavu. Při příchodu odpovědi porovnáte, zda se ještě jedná o aktuální požadavek, a pokud ne, stav nezměníte. Tento trik je jednoduchý, ale ušetří vám spoustu záhadných chyb, které se obtížně reprodukují.

Na závěr si ověřte, že váš terminál a debugger odpovídají aktuálnímu jazyku. V IDE nastavte pro každý adresář jiný run configuration. Ujistěte se, že při spuštění testů používáte správný framework (např. pytest pro Python, Jest pro JavaScript). Dobré je také zapnout „spy" – funkci, která ukazuje, jaký příkaz se spouští na pozadí. Pokud vidíte, že se volá špatný interpret, je to první signál, že máte ve struktuře projektu chybu. Po takovém nastavení se práce s více jazyky stane intuitivní a nebudete ztrácet čas laděním prostředí.

Pro testování reducerů stačí volat je s aktuálním stavem a akcí. Vezměte si příklad jednoduchého reduktoru pro seznam úkolů. V testu vytvoříte počáteční stav, zavoláte reducer s akcí typu 'ADD_TODO' a ověříte, že nový stav obsahuje přidanou položku. Důležité je netestovat vnitřní implementaci, ale výsledný stav. Vyhnete se tím zbytečným změnám testů při refaktoru. Pro hlubší ověření použijte knihovnu jako Jest, která umožňuje snapshot testování, ale pozor na příliš velké snapshosty – mohou být nepřehledné a křehké.

Pro lepší izolaci můžete využít knihovny jako Redux Mock Store, které vám poskytnou jednoduché rozhraní pro testování akcí a thunků. Nemusíte ale hned sahat po dalších závislostech – stačí vám obyčejný objekt s metodami. Testy pak budou rychlé, deterministické a snadno udržovatelné. Tento přístup se hodí i pro projekty, kde nechcete zatěžovat build dalšími balíčky.

Důležité je také udržovat databázový systém a knihovny aktuální. Dodavatelé opravují známé zranitelnosti, a pokud používáte starou verzi, vystavujete se riziku, které už je veřejně známé. Zavedení těchto opatření – parametrizace, validace, omezení práv, bezpečné chybové hlášky a pravidelné aktualizace – výrazně snižuje pravděpodobnost úspěšného útoku. SQL injection není problém, který by se dal vyřešit jednou provždy, ale kombinací správných návyků a nástrojů ji můžete efektivně eliminovat.

Časté chyby a jak je odhalit Nejčastější chybou je použití operátoru přiřazení = místo porovnání ===. Výsledkem je, že podmínka vždy projde, ale hodnota se tiše změní. Pokud si nejste jistí, podívejte se na hodnotu proměnné v breakpointu – pokud se liší od očekávání, pravděpodobně jde o tento případ. Další častou chybou je zapomenutí na asynchronní volání. Když používáte setTimeout nebo fetch, kód běží až po dokončení aktuálního vlákna. Pokud očekáváte hodnotu okamžitě, dostanete undefined. Zde pomůže panel Network, který ukazuje, zda požadavek vůbec proběhl a s jakou odpovědí.

Asynchronní akce testujete podobně, ale s jedním rozdílem: potřebujete simulovaný dispatch a getState. Předpokládejme thunk, který načítá data z API a po úspěchu dispatchuje akci. V testu vytvoříte mock funkce pro dispatch a getState, zavoláte thunk a počkáte na dokončení. Klíčové je správně nastavit mock pro API volání – ideálně pomocí vstřikování závislostí, kdy thunk přijímá funkci pro fetch jako parametr. Tím zajistíte, že test nezávisí na síti, a můžete simulovat úspěch i chybu.

Automatické rozpoznání podle obsahu souboru Někdy nestačí přípona, zvlášť když máte soubory, které obsahují mix jazyků, například šablony HTML s vestavěným JavaScriptem nebo Pythonem. V takovém případě využijte funkci „associate file with language" nebo si napište vlastní pravidla. V mnoha IDE stačí kliknout na jazyk v pravém dolním rohu a vybrat správnou asociaci. Důležité je také zapnout detekci podle prvního řádku souboru, jako je shebang u skriptů, a nastavit si klávesové zkratky pro rychlé přepínání mezi jazyky.