React
Solo componenti funzionali
Usa sempre componenti funzionali TSX con export nominati.Props
Crea un tipo denominato{ComponentName}Props. Usa la destrutturazione. Non usare React.FC.
Niente spread di una singola variabile nelle props
Gestione dello stato
Atomi Jotai per lo stato globale
- Preferisci gli atomi al prop drilling
- Non usare
useRefper lo stato — usauseStateo gli atomi - Usa famiglie di atomi e selettori per le liste
Evita i re-render inutili
- Estrai
useEffecte il recupero dei dati in componenti sidecar fratelli - Preferisci i gestori di eventi (
handleClick,handleChange) auseEffect - Non usare
React.memo()— risolvi invece la causa principale - Limita l’uso di
useCallbackouseMemo
TypeScript
typeinvece diinterface— più flessibile, più facile da comporre- Letterali di stringa invece degli enum — tranne per gli enum generati da GraphQL codegen e le API interne della libreria
- Niente
any— TypeScript rigoroso applicato - Niente import di tipo — usa import normali (applicato da Oxlint
typescript/consistent-type-imports) - Usa Zod per la validazione a runtime di oggetti non tipizzati
JavaScript
Denominazione
- Variabili: camelCase, descrittive (
emailnonvalue,fieldMetadatanonfm) - Costanti: SCREAMING_SNAKE_CASE
- Tipi/Classi: PascalCase
- File/directory: kebab-case (
.component.tsx,.service.ts,.entity.ts) - Gestori di eventi:
handleClick(nononClickper la funzione gestore) - Props dei componenti: metti come prefisso il nome del componente (
ButtonProps) - Componenti styled: metti come prefisso
Styled(StyledTitle)
Stile
Usa i componenti styled di Linaria. Usa i valori del tema — evitapx, rem o colori hardcoded.
Importazioni
Usa gli alias invece dei percorsi relativi:Struttura delle cartelle
- I moduli possono importare da altri moduli, ma
ui/dovrebbe restare privo di dipendenze - Usa le sottocartelle
internal/per il codice privato del modulo - Componenti sotto le 300 righe, servizi sotto le 500 righe