Skip to main content

React

Solo componentes funcionales

Siempre usa componentes funcionales TSX con exportaciones con nombre.

”Props”

Crea un tipo llamado {ComponentName}Props. Usa la desestructuración. No uses React.FC.

Sin propagación de props de una sola variable

Gestión del Estado

Átomos de Jotai para estado global

  • Prefiere átomos en lugar de prop drilling
  • No uses useRef para estado — usa useState o átomos
  • Usa familias de átomos y selectores para listas

Evita renderizados innecesarios

  • Extrae useEffect y la obtención de datos en componentes sidecar hermanos
  • Prefiere los manejadores de eventos (handleClick, handleChange) en lugar de useEffect
  • No uses React.memo() — en su lugar, corrige la causa raíz
  • Limita el uso de useCallback / useMemo

TypeScript

  • type mejor que interface — más flexible, más fácil de componer
  • Literales de cadena mejor que enums — excepto para los enums de codegen de GraphQL y las APIs internas de la biblioteca
  • Sin any — TypeScript estricto obligatorio
  • Sin importaciones de tipos — usa importaciones normales (aplicado por Oxlint typescript/consistent-type-imports)
  • Usa Zod para la validación en tiempo de ejecución de objetos no tipados

JavaScript

Nomenclatura

  • Variables: camelCase, descriptivas (email no value, fieldMetadata no fm)
  • Constantes: SCREAMING_SNAKE_CASE
  • Tipos/Clases: PascalCase
  • Archivos/directorios: kebab-case (.component.tsx, .service.ts, .entity.ts)
  • Manejadores de eventos: handleClick (no onClick para la función manejadora)
  • Props de componentes: anteponer el nombre del componente (ButtonProps)
  • Componentes con estilo: anteponer Styled (StyledTitle)

Estilo

Usa componentes con estilo de Linaria. Usa valores del tema — evita px, rem o colores fijos.

Importar

Usa alias en lugar de rutas relativas:

Estructura de carpetas

  • Los módulos pueden importar desde otros módulos, pero ui/ debe permanecer sin dependencias
  • Usa subcarpetas internal/ para código privado del módulo
  • Componentes de menos de 300 líneas, servicios de menos de 500 líneas