Vai al contenuto principale

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 useRef per lo stato — usa useState o gli atomi
  • Usa famiglie di atomi e selettori per le liste

Evita i re-render inutili

  • Estrai useEffect e il recupero dei dati in componenti sidecar fratelli
  • Preferisci i gestori di eventi (handleClick, handleChange) a useEffect
  • Non usare React.memo() — risolvi invece la causa principale
  • Limita l’uso di useCallback o useMemo

TypeScript

  • type invece di interface — 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 (email non value, fieldMetadata non fm)
  • Costanti: SCREAMING_SNAKE_CASE
  • Tipi/Classi: PascalCase
  • File/directory: kebab-case (.component.tsx, .service.ts, .entity.ts)
  • Gestori di eventi: handleClick (non onClick per 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 — evita px, 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