React Labs: Lo que hemos estado trabajando – febrero de 2024

La última hoja de ruta de React, incluido un compilador de optimización y funciones como la auto-memoización y las acciones de servidor, está provocando reacciones mixtas entre los desarrolladores frontend. Muchos ven estos avances como potentes, pero temen que React se haya vuelto demasiado complejo y “mágico”, especialmente con los hooks, React Server Components y la creciente influencia de Next.js y Vercel, lo que dificulta razonar sobre el código y vuelve más frágiles los pipelines de compilación. Otros sostienen que el ecosistema de React, la compatibilidad hacia atrás y su idoneidad para aplicaciones grandes y duraderas siguen justificando su elección, incluso cuando alternativas como Vue, Svelte, Preact, MobX, htmx y los frameworks del lado del servidor ganan interés por su simplicidad.

Create React App y herramientas

  • CRA se considera efectivamente abandonado y nunca estuvo muy bien financiado; estaba pensado como un punto de partida, no como la herramienta de producción “mejor”.
  • Los comentaristas señalan que las herramientas modernas (especialmente Vite) son más simples, rápidas y fáciles de depurar que la opaca configuración de Webpack de CRA.
  • Algunos todavía usan CRA para aplicaciones pequeñas, pero reconocen problemas futuros debido al mal mantenimiento.

Hooks, complejidad y “magia”

  • Muchos sienten que React se ha vuelto demasiado complejo, especialmente con hooks, hidratación y directivas de servidor/cliente.
  • Los hooks se describen como un lenguaje incrustado con sus propias reglas que se apartan de la intuición normal de JS; los casos simples son más fáciles, pero depurar código complejo es más difícil.
  • Otros argumentan que los hooks aumentan la explicitud, encajan mejor con la arquitectura concurrente de React y no son inherentemente confusos una vez que se aprende el modelo mental.
  • Hay frustración porque las explicaciones y la guía de React sobre hooks (por ejemplo, useEffect) han cambiado con el tiempo, lo que causa confusión.

Compilador de optimización / auto-memoización

  • El nuevo compilador (React Forget) busca auto-memoizar y eliminar muchos patrones manuales de useMemo/useCallback.
  • A algunos les impresiona, pero les inquieta la “magia” de cambiar el comportamiento basándose en análisis semántico del valor en tiempo de compilación, especialmente cuando altera la semántica percibida del lenguaje.
  • Surgen preocupaciones por otra capa de compilador más en pipelines de compilación ya complejos.

Debates sobre gestión de estado

  • Debate sobre si useReducer + useContext puede reemplazar a Redux; una parte afirma que sí, la otra enfatiza diferencias de rendimiento y suscripción.
  • Se menciona Redux Toolkit por haber reducido el boilerplate, pero algunos siguen percibiendo Redux/RTK como verboso.
  • MobX recibe elogios por su reactividad sencilla y la separación entre dominio e interfaz de usuario, pero los críticos dicen que la reactividad push estilo observer conduce a espagueti y recomputaciones sorprendentes.

React frente a alternativas

  • Varios comentaristas recomiendan Vue, Svelte, Preact, htmx, Rails/Hotwire o el renderizado tradicional en servidor como opciones más simples e intuitivas.
  • Otros responden que el modelo de modo inmediato de React, su enorme ecosistema, su pool de contratación y su fuerte compatibilidad hacia atrás siguen haciéndolo la opción pragmática, especialmente para aplicaciones web complejas y React Native.
  • Algunos ven el React moderno como un sistema nuevo, más enrevesado, montado sobre la popularidad de la biblioteca original.