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-components
outailwind
- Instala
react-hook-form
ouformik
- Instala
yup
pra validação - Instala
zustand
,redux
ou 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.tsx
com 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
, umuseModal
e 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 install
de 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.ts
no mesmo lugar - Enfia um monstro chamado
helpers.ts
com 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/home
ng g component components/navbar
ng g component pages/login
ng g service services/auth
ng g guard guards/auth
- Define rotas direto no
app.config.ts
com os componentes standalone - Adiciona providers e imports no
bootstrapApplication(AppComponent, {...})
- Layout padrão via
app.component.ts
com router-outlet + navbar - ReactiveForms direto nos componentes, sem enrolação
- Toasts, loading, interceptors configurados direto no
main.ts
ou noproviders
dobootstrapApplication
- 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