Onde Angular é melhor que React. Parte 1 - A Terceirização
Published: 2021-03-24 21:44:34

> este é um "texto rápido" e incompleto, acabei postando ao invés de deixar abandonado no meu computador...

O React de certa forma me lembra o Express (do node.js) com relação ao escopo da biblioteca. O React foca em uma parte importante, porém incompleta, de uma proposta de criação de interface de usuário. As partes faltantes são completadas por bibliotecas de terceiros ou sugeridas.

Um ponto positivo para essa abordagem é que a comunidade propôe novas e melhores formas de resolver os problemas de uma forma bem dinâmica.

Faço a comparação com o Express porque criar uma aplicação com uma escala e qualidade razoável a partir de apenas Express, e então ir adicionando as partes de terceiros uma a uma, é um tanto improdutivo. Usar um pacote mais integrado, a partir de uma framework bem desenvolvida (Rails, Laravel, Spring Boot, escolha a sua...) trás resultados mais consistentes e padronizados.

O desenvolvimento "terceirizado" também trás mais armadilhas e um caminho menos claro a um novo desenvolvedor. É especialmente fácil errar ou perder algum ponto essencial, quando este não faz parte do núcleo da ferramenta. Isto significa que equipes "reais" são bastante impactadas negativamente pela escolha do React, pois raras equipes são formadas apenas por "sêniors com 5 anos em experiência de React". Mesmo desenvolvedores experientes aprendendo React podem facilmente cair nas pegadinhas.

Um exemplo claro de um ponto essencial ausente no núcleo do React é a funcionalidade suprida pelo redux. O _react-redux_ faz -- de uma forma piorada -- , aquilo que os serviços do Angular fazem: providenciar estado contextual, de modo a evitarmos o "prop-drilling". 3 anos depois a comunidade já sabe que Redux é ruim, mas ainda não tem lá muita certeza de qual das 30 libs disponíveis escolher para resolver o problema que o react-redux se propõe a resolver. Algumas dessas 30 já estão até desatualizadas -- por exemplo ontem fui conferir as docs do MobX e eles não parecem aceitar hooks.

A bagunça é tão grande que o React passou anos sem mesmo ter uma API estável de injeção de dependências, um recurso absolutamente essencial. Mesmo a API atual de contexto é um tanto de baixo nível pra ser usada diretamente, servido mais como bloco de construção para soluções mais elaboradas. Mas tem muita gente já caindo na pegadinha de usá-la em substituição a uma solução decente de gestão de estado.

E finalmente, temos as consequências de um ecossistema que "move rápido e quebra coisas". Cada projeto React de um ano diferente e de um gosto diferente usará libs diferentes para gestão de estado, CSS-in-JS, formulários, roteamento, build, etc. Talvez após alguns anos algumas dessas se tornem legados, ou tenham mudado radicalmente. Não é lá a coisa mais prazerosa de se fazer manutenção. Acabam se criando camadas extras de complexidade sobre algo que inicialmente teria a função de simplificar o desenvolvimento.

**Onde o Angular é melhor neste aspecto**

  - O Angular (2+) trás uma gestão de estado poderosa e simples de usar desde o dia 1; Você não precisa de uma lib diferente de gestão de estado para o Angular todo ano, você não precisa engolir todas as limitações do Redux, porque a injeção de dependências **resolve o problema, desde o dia 1**;
  - O Angular trás consigo um sistema de build mais completo do que o CRA, com uma forma clara de fazer code splitting, e de organizar a codebase para isso. Já quem pega pra fazer projeto React descobre que tem que fazer code-splitting 2 anos depois, e se não tiver sorte vai ter que refatorar o projeto pois ele não foi planejado pra isso;
  - O sistema de CSS do Angular busca seguir padrões de propostas da web (CSS com escopo) e é familiar a qualquer desenvolvedor web; No React, bem, já começa que tem que escolher entre umas 5 opções entre CSS global e CSS-IN-JS. Algumas com sintaxe bem criativa;
  - No Angular você raramente precisa ficar se preocupando com imutabilidade de código, ou fazendo micro-managing de renders. Uma carga cognitiva significativa a menos;
  - O sistema de roteamento do Angular funciona bem. É estável. Integra com code splitting. Por outro lado o React Router muda todo ano...
  - Apesar da framework estar em constante atualização, atualizações do Angular são, sem sombra de dúvidas, menos disruptivas do que atualização de umas das 50 libs de React em seu projeto. Ou do próprio React;
  - Nem tudo é perfeito no Angular. Ninguém é lá muito fã dos formulários reativos. E eles continuarão lá. Não que as pessoas tenham decidido em 2021 como fazer formulário no React (mas no Vue sim).