Redux v Reactu: kde nejčastěji vzniká zbytečný re-render

Z Mazovia
Wersja z dnia 19:48, 1 paź 2026 autorstwa EdytheSanborn9 (dyskusja | edycje) (Utworzono nową stronę "Asynchronní kód je další místo, kde vzniká zmatek. Nemíchejte async/await s .then() v jedné funkci. Zvolte jeden styl a držte se ho. U await vždy myslete na chyby – obalte volání do try/catch, nebo použijte pomocnou funkci, která vrací dvojici hodnot. Nikdy nenechávejte odmítnutý promise bez ošetření, jinak dostanete tichý pád, který se hledá těžko.<br><br>Pro spouštění v CI slouží příkaz pytest s parametrem --junitxml, který vy…")
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)

Asynchronní kód je další místo, kde vzniká zmatek. Nemíchejte async/await s .then() v jedné funkci. Zvolte jeden styl a držte se ho. U await vždy myslete na chyby – obalte volání do try/catch, nebo použijte pomocnou funkci, která vrací dvojici hodnot. Nikdy nenechávejte odmítnutý promise bez ošetření, jinak dostanete tichý pád, který se hledá těžko.

Pro spouštění v CI slouží příkaz pytest s parametrem --junitxml, který vytvoří strojově čitelný výstup. Pokrytí kódu změříte pluginem pytest-cov a příkazem pytest --cov=. Neusilujte ale o stoprocentní pokrytí za každou cenu. Důležité je pokrýt logiku a hraniční případy, ne každý řádek. pytest nabízí i možnost přeskakovat testy pomocí skipif nebo označit očekávaná selhání přes xfail. Tyto značky udržují sadu testů čitelnou i ve chvíli, kdy některé části ještě nejsou hotové.

Druhou častou chybou je ukládat do Reduxu vše. Lokální stav, jako otevřené menu nebo text ve formuláři, do store nepatří. Redux je pro sdílená data, která potřebuje více částí aplikace, případně pro data, jež mají přežít navigaci. Pokud do store cpe­te i to, co zvládne useState, zvyšujete složitost a nutíte komponenty reagovat na změny, které se jich netýkají. Držte store co nejmenší a účelový.

Vstupy, proměnné a proč to nejde bez převodu Konzolová aplikace nemusí jen vypisovat. Zkuste Console.ReadLine(), které načte řádek zadaný uživatelem. Problém je, že návratová hodnota je vždy text, i když uživatel napíše číslo. S textem se nedá počítat, dokud ho nepřevedete. Slouží k tomu int.Parse nebo lépe int.TryParse, které nevyhodí výjimku při nesmyslném zadání. Rozdíl je zásadní: Parse při chybě ukončí program pádem, TryParse vrátí false a vy můžete reagovat výzvou k opravě. Právě neošetřený vstup bývá u začátečníků nejčastější důvod, proč aplikace spadne při prvním ostrém použití.

Nakonec se nebojte kombinace. REST pro veřejné a souborové endpointy, GraphQL pro složité čtecí scénáře uvnitř produktu. Rozhodujte podle konkrétních dotazů, které klienti posílají, ne podle toho, co zní moderněji. Změřte počet požadavků na obrazovku, velikost odpovědí a dobu odezvy. Teprve čísla ukážou, zda se vyplatí měnit architekturu.

Do těla metody napište Console.WriteLine("Ahoj"); a stiskněte kombinaci pro spuštění. Program se přeloží a v okně terminálu se objeví text. Tady přichází první častá chyba: zapomenutý středník nebo chybějící uvozovka. Vývojové prostředí na ně upozorní červeným podtržením ještě před spuštěním. Druhá chyba je špatně napsaný název metody – C# rozlišuje velká a malá písmena, takže „console.writeline" nefunguje. Napověda s seznamem členů se zobrazí po napsání tečky a výrazně snižuje počet překlepů.

Poslední věc: middleware a thunky. Není nutné používat thunk na všechno. Pokud potřebujete řešit složité asynchronní scénáře, zvažte redux-saga nebo redux-observable, ale vždy s ohledem na to, kolik toho tým zvládne udržovat. Příliš mnoho vrstev abstrakce vede k tomu, že se ztrácí přehled o tom, co se v aplikaci děje. Redux je nástroj, ne cíl. Když ho používáte vědomě a s ohledem na výkon, bude aplikace svižná a předvídatelná.

Selektory a memoizace: kde lidé přestávají Selektory by měly být čisté a pokud možno memoizované. Když vytváříte novou referenci při každém volání, například state.items.filter(...) bez memoizace, komponenta se překreslí při každé akci, i když se data nezměnila. Řešením je createSelector z knihovny Reselect. Ten si pamatuje vstupy a přepočítá výstup jen tehdy, když se změní relevantní část stavu. Pozor ale na to, že memoizace funguje pouze pro jeden argument. Pokud selektor používáte s parametry, musíte vytvořit novou instanci selektoru pro každou kombinaci, jinak si budete předávat špatná data.

První konzolová aplikace v C# vypadá jako banalita, dokud člověk nezačne řešit, kde vlastně kód napsat a jak ho spustit. Nejjednodušší cesta vede přes vývojové prostředí s integrovaným terminálem. Po instalaci zvolte typ projektu Konzolová aplikace, zadejte název a nechte vygenerovat kostru. Dostanete soubor s metodou Main, což je vstupní bod programu. Pokud místo toho zvolíte šablonu s „top-level statements", uvidíte jen jediný řádek s příkazem Console.WriteLine. Obě varianty jsou správné, jen se liší mírou výchozí struktury.

SQL injection vzniká ve chvíli, kdy se do textu databázového dotazu vkládá vstup od uživatele přímým spojováním řetězců. Útočník pak místo očekávané hodnoty pošle fragment SQL, který změní význam celého dotazu. Nejde přitom jen o přihlašovací formuláře. Zranitelné bývají vyhledávací pole, filtry v administraci, řazení tabulek, stránkování i importy souborů. Stačí jedno místo, kde se hodnota z požadavku ocitne v dotazu bez oddělení od kódu.