Skip to main content

React

Doar componente funcționale

Folosește întotdeauna componente funcționale TSX cu exporturi denumite.

Proprietăți

Creează un tip numit {ComponentName}Props. Folosește destructurarea. Nu folosi React.FC.

Fără spread al unei singure variabile de props

Managementul stării

Atomi Jotai pentru starea globală

  • Preferă atomii în locul prop drilling-ului
  • Nu folosi useRef pentru stare — folosește useState sau atomi
  • Folosește familii de atomi și selectori pentru liste

Evită re-randări inutile

  • Extrage useEffect și preluarea datelor în componente surori de tip sidecar
  • Preferă handleri de evenimente (handleClick, handleChange) în locul lui useEffect
  • Nu folosi React.memo() — în schimb, rezolvă cauza principală
  • Limitează utilizarea useCallback / useMemo

TypeScript

  • type în loc de interface — mai flexibil, mai ușor de compus
  • Șiruri literale în loc de enum-uri — cu excepția enum-urilor generate de GraphQL codegen și a API-urilor interne ale bibliotecii
  • Fără any — TypeScript strict este impus
  • Fără importuri de tip — folosește importuri obișnuite (impus de Oxlint typescript/consistent-type-imports)
  • Folosește Zod pentru validarea în timp de execuție a obiectelor netipizate

JavaScript

Denumiri

  • Variabile: camelCase, descriptive (email nu value, fieldMetadata nu fm)
  • Constante: SCREAMING_SNAKE_CASE
  • Tipuri/Clase: PascalCase
  • Fișiere/directoare: kebab-case (.component.tsx, .service.ts, .entity.ts)
  • Handleri de evenimente: handleClick (nu onClick pentru funcția handler)
  • Props de componentă: prefixează cu numele componentei (ButtonProps)
  • Componente stilizate: prefixează cu Styled (StyledTitle)

Stilizare

Folosește componente stilizate Linaria. Folosește valorile din temă — evită px, rem sau culori hardcodate.

Importuri

Folosește aliasuri în locul căilor relative:

Structura folderelor

  • Modulele pot importa din alte module, dar ui/ ar trebui să rămână fără dependențe
  • Folosește subfoldere internal/ pentru cod privat modulului
  • Componente sub 300 de linii, servicii sub 500 de linii