React Labs: O que Temos Estudado – Fevereiro de 2024

O roteiro mais recente do React, incluindo um compilador otimizador e recursos como auto-memoization e server actions, está provocando reações mistas entre desenvolvedores frontend. Muitos veem os avanços como poderosos, mas se preocupam com o fato de o React ter ficado excessivamente complexo e “mágico”, especialmente com hooks, React Server Components e a crescente influência do Next.js e da Vercel, tornando o código mais difícil de raciocinar e os pipelines de build mais frágeis. Outros argumentam que o ecossistema do React, a compatibilidade com versões anteriores e a adequação para apps grandes e de longa duração ainda justificam escolhê-lo, mesmo com alternativas como Vue, Svelte, Preact, MobX, htmx e frameworks server-side ganhando interesse por sua simplicidade.

Create React App e Ferramentas

  • CRA é visto como, na prática, abandonado e nunca foi fortemente priorizado; ele foi pensado como um ponto de partida, não como a ferramenta de produção “melhor”.
  • Comentadores observam que ferramentas modernas (especialmente Vite) são mais simples, mais rápidas e mais fáceis de depurar do que a configuração opaca de Webpack do CRA.
  • Alguns ainda usam CRA para apps pequenos, mas reconhecem problemas futuros devido à má manutenção.

Hooks, Complexidade e “Magia”

  • Muitos sentem que React ficou complexo demais, especialmente com hooks, hydration e diretivas de servidor/cliente.
  • Hooks são descritos como uma linguagem incorporada, com suas próprias regras que se afastam da intuição normal de JS; casos simples ficam mais fáceis, mas depurar código complexo é mais difícil.
  • Outros argumentam que hooks aumentam a explicitude, combinam melhor com a arquitetura concorrente do React e não são inerentemente confusos depois que o modelo mental é aprendido.
  • Há frustração com o fato de as explicações e orientações do React sobre hooks (por exemplo, useEffect) terem mudado ao longo do tempo, causando confusão.

Compilador Otimizador / Auto-memoization

  • O novo compilador (React Forget) pretende fazer auto-memoization e remover muitos padrões manuais de useMemo/useCallback.
  • Alguns ficam impressionados, mas desconfortáveis com a “magia” de mudar o comportamento com base na análise de valores semânticos em tempo de compilação, especialmente quando isso altera a semântica percebida da linguagem.
  • Há preocupações sobre mais uma camada de compilador em pipelines de build já complexos.

Debates sobre Gerenciamento de Estado

  • Debate sobre se useReducer + useContext pode substituir Redux; um lado afirma que sim, o outro ressalta diferenças de desempenho e de subscrição.
  • Redux Toolkit é citado por ter reduzido o boilerplate, mas alguns ainda veem Redux/RTK como verboso.
  • MobX recebe elogios por sua reatividade direta e pela separação entre domínio e UI, mas críticos dizem que a reatividade por push no estilo observer leva a código espaguete e recomputações surpreendentes.

React vs Alternativas

  • Vários comentaristas defendem Vue, Svelte, Preact, htmx, Rails/Hotwire ou renderização tradicional no servidor como mais simples e intuitivos.
  • Outros contra-argumentam que o modelo de modo imediato do React, seu enorme ecossistema, o mercado de contratação e a forte compatibilidade com versões anteriores ainda o tornam a escolha pragmática, especialmente para apps web complexos e React Native.
  • Alguns veem o React moderno como, na prática, um sistema novo e mais complicado montado sobre a popularidade da biblioteca original.