React
Pouze funkcionální komponenty
Vždy používejte funkcionální komponenty TSX s pojmenovanými exporty.Vlastnosti
Vytvořte typ s názvem{ComponentName}Props. Používejte destrukturalizaci. Nepoužívejte React.FC.
Nepoužívejte prop spreading jediné proměnné
Správa stavu
Atomy Jotai pro globální stav
- Upřednostňujte atomy před prop drillingem
- Nepoužívejte
useRefpro stav — použijteuseStatenebo atomy - Používejte rodiny atomů a selektory pro seznamy
Vyhněte se zbytečnému opakovanému vykreslování
- Přesuňte
useEffecta načítání dat do sesterských sidecar komponent - Upřednostňujte obslužné funkce událostí (
handleClick,handleChange) předuseEffect - Nepoužívejte
React.memo()— místo toho opravte kořenovou příčinu - Omezte používání
useCallback/useMemo
TypeScript
typemístointerface— flexibilnější, lépe kombinovatelný- Řetězcové literály místo výčtů — s výjimkou enumů GraphQL codegenu a interních API knihoven
- Žádné
any— vynucený přísný TypeScript - Žádné importy typů — používejte běžné importy (vynuceno nástrojem Oxlint
typescript/consistent-type-imports) - Používejte Zod pro runtime validaci netypovaných objektů
JavaScript
Pojmenovávání
- Proměnné: camelCase, popisné (
emailnikolivalue,fieldMetadatanikolifm) - Konstanty: SCREAMING_SNAKE_CASE
- Typy/Třídy: PascalCase
- Soubory/adresáře: kebab-case (
.component.tsx,.service.ts,.entity.ts) - Obslužné funkce událostí:
handleClick(nikolionClickpro obslužnou funkci) - Vlastnosti komponenty (props): předponu tvoří název komponenty (
ButtonProps) - Stylované komponenty: předpona
Styled(StyledTitle)
Styling
Používejte stylované komponenty Linaria. Používejte hodnoty z tématu — vyhněte se napevno zadanýmpx, rem nebo barvám.
Importy
Používejte aliasy místo relativních cest:Struktura složek
- Moduly mohou importovat z jiných modulů, ale
ui/by mělo zůstat bez závislostí - Používejte podadresáře
internal/pro interní kód modulu - Komponenty do 300 řádků, služby do 500 řádků