React
Apenas componentes funcionais
Use sempre componentes funcionais TSX com exportações nomeadas.Propriedades
Crie um tipo chamado{ComponentName}Props. Use desestruturação. Não use React.FC.
Sem spread de props de uma única variável
Gerenciamento de Estado
Átomos do Jotai para estado global
- Prefira átomos em vez de prop drilling
- Não use
useRefpara estado — useuseStateou átomos - Use famílias de átomos e seletores para listas
Evite re-renderizações desnecessárias
- Extraia
useEffecte busca de dados em componentes sidecar irmãos - Prefira manipuladores de eventos (
handleClick,handleChange) em vez deuseEffect - Não use
React.memo()— corrija a causa raiz em vez disso - Limite o uso de
useCallback/useMemo
TypeScript
typeem vez deinterface— mais flexível, mais fácil de compor- Literais de string em vez de enums — exceto para enums do codegen do GraphQL e APIs internas da biblioteca
- Sem
any— TypeScript estrito aplicado - Sem imports de tipos — use imports normais (aplicado pelo Oxlint
typescript/consistent-type-imports) - Use Zod para validação em tempo de execução de objetos não tipados
JavaScript
Nomenclatura
- Variáveis: camelCase, descritivas (
emailnãovalue,fieldMetadatanãofm) - Constantes: SCREAMING_SNAKE_CASE
- Tipos/Classes: PascalCase
- Arquivos/diretórios: kebab-case (
.component.tsx,.service.ts,.entity.ts) - Manipuladores de eventos:
handleClick(nãoonClickpara a função manipuladora) - Props do componente: prefixe com o nome do componente (
ButtonProps) - Componentes estilizados: prefixe com
Styled(StyledTitle)
Estilização
Use componentes estilizados do Linaria. Use valores do tema — evitepx, rem ou cores hardcoded.
Importações
Use aliases em vez de caminhos relativos:Estrutura de pastas
- Módulos podem importar de outros módulos, mas
ui/deve permanecer sem dependências - Use subpastas
internal/para código privado do módulo - Componentes com menos de 300 linhas, serviços com menos de 500 linhas