Configurar um repositório React é muito trabalhoso
Sabe, muita gente acha que fazer projetos pequenos em React é melhor do que em Angular,
Etapa 1: Instalação (uns 11 passos mesmo)
npx create-react-app ou vite- Instala
react-router-dom - Instala
axios - Instala
eslint + prettier - Instala
styled-componentsoutailwind - Instala
react-hook-formouformik - Instala
yuppra validação - Instala
zustand,reduxou qualquer estado global porque o useState já não serve - Instala ícones (
react-icons,lucide, etc) - Instala um loader tipo
react-spinners - Instala o pacote do momento que vai ser abandonado mês que vem
Etapa 2: Configuração (isso dá mais trabalho que programar)
- Cria pastas:
components,pages,services,hooks,utils,types,contexts,assets,routes,config,themes,constants,guards,layouts - Configura ESLint + Prettier + editorconfig (pra ninguém te xingar no PR, acresite que eu xingaria)
- Cria o
Router.tsxcom 50 linhas pra 3 telas - Define layout padrão com navbar, sidebar e um wrapper invisível só pra manter a estrutura(ou css de cria mermo)
- Cria ThemeProvider mesmo sem mudar nenhuma cor (nunca vi um projeto react sem isso)
- Cria API client com interceptors, mas usa só um endpoint
- Cria Context de autenticação e esquece de usar(faz o tratamento na rota faz kssk)
- Define tipos de todas as interfaces como se fosse TypeScript em banco de dados
- Cria um
useDebounce, umuseModale nunca usa - Configura loading global e toast de erro/sucesso genérico
- Faz mock de backend só pra deletar depois
- Cria um form genérico mas termina copiando e colando form em cada tela
- Implementa controle de acesso e esquece de usar
- Cria constantes pra rotas, roles, páginas, cores e mensagens
- Escreve 4 testes que quebram quando alguém dá
npm installde novo
Etapa 3: Estrutura do repositório (a parte que você finge que é senior)
- Separa telas por domínio (ex:
User,Product,Dashboard) - Cria serviço de API por entidade (
userService.ts, etc) - Organiza actions, reducers, selectors
- Adiciona barrel files (
index.ts) em tudo - Organiza components em
shared/,ui/,domain/etrash/ - Separa os hooks por contexto, depois junta tudo de novo
- Cria arquivos com nome
types.ts,interfaces.ts,models.tsno mesmo lugar - Enfia um monstro chamado
helpers.tscom 900 funções(aqui eu n julgo, todo projeto tem isso) - Cria um README que mente dizendo que o projeto está simples
- Sobe no GitHub e já vem alguém pedir SSR e suporte a mobile
Resultado:
Nenhum, apenas precisava falar mal de React em algum lugar.
Tirando as brincadeiras espalhadas pela lista, configurar um repo react pra ser rousbo é outros 500, a complexidade sobe demais. Se você tem 4 telas, 6 cruds e 20 regras de negocios por trás, esqueça! React vai te trazer muita dor de cabeça.
Compara com angular:
Etapa 1: Instalação
ng new projeto --standalone- Seleciona routing (sim), SCSS (ou outro pré-processador se quiser)
- Instala pacote de UI (Material, Tailwind, etc.)
- Instala biblioteca de toast, se quiser (
ngx-toastr,angular-notifier, etc.) - Instala libs adicionais se precisar (icons, date-fns, etc.)
Etapa 2: Configuração
ng g component pages/homeng g component components/navbarng g component pages/loginng g service services/authng g guard guards/auth- Define rotas direto no
app.config.tscom os componentes standalone - Adiciona providers e imports no
bootstrapApplication(AppComponent, {...}) - Layout padrão via
app.component.tscom router-outlet + navbar - ReactiveForms direto nos componentes, sem enrolação
- Toasts, loading, interceptors configurados direto no
main.tsou noprovidersdobootstrapApplication - Tema global configurado via SCSS ou com a lib UI
- Autenticação via serviço + guard, sem contexto/mágica
- Páginas separadas por pastas com seus próprios componentes
A estrutura seria mais ou menos assim:
src/
app/
app.component.ts (standalone)
app.config.ts (routes + providers)
pages/
login/
login.component.ts (standalone)
home/
home.component.ts (standalone)
components/
navbar/
navbar.component.ts (standalone)
services/
auth.service.ts
guards/
auth.guard.ts
interceptors/
auth.interceptor.ts
models/
user.model.ts
assets/
environments/
main.ts
styles.scss