De los espaguetis al sushi: escribir código React limpio y mantenible

De los espaguetis al sushi: escribir código React limpio y mantenible
Jonathan Bracho

Jonathan Bracho

ago 05, 2024

ReactTypescript

Imagínate esto: te entregan una base de código React. La estructura de carpetas es un laberinto, los componentes parecen la habitación de un adolescente, y la perforación es más profunda que la Fosa de las Marianas. A todos nos ha pasado. Si el código desordenado es el espagueti de nuestra cocina digital, el código limpio y mantenible es el sushi: sabroso, preciso y satisfactorio.

Durante mis más de 4 años y medio como desarrollador frontend, he tenido mi buena ración de cocinas caóticas (léase: bases de código). Transformarlas en platos de sushi elegantes y mantenibles ha sido un reto y un placer. Permíteme compartir algunos consejos, trucos y algunos moratones de mi viaje para ayudarte a elevar tu código React de «fideos hervidos» a digno de una estrella Michelin.

La puesta en marcha: Prepararse para el éxito.

En el mundo de un chef de sushi, mise en place significa «todo en su sitio». Para los desarrolladores, esto comienza con la configuración del proyecto.

  • Estructuras de archivos modulares.

Agrupa los archivos relacionados. ¿Una carpeta de componentes repleta de cientos de archivos? Eso es olor a código. En su lugar, estructura tu proyecto en torno a características o dominios (features/Blog, features/Auth). Bonus: el futuro te lo agradecerá cuando depures.

  • TypeScript es tu salsa de soja.

Puedes vivir sin él, pero ¿por qué ibas a hacerlo? TypeScript detecta los errores antes y hace que la refactorización sea menos aterradora. Invierte tiempo en definir interfaces y tipos, incluso para tus props. Tus compañeros de equipo (y tu IDE) te adorarán por ello.

Enrollando el maki perfecto: las mejores prácticas de los componentes.

Un rollo desordenado se deshace. Lo mismo ocurre con los componentes.

  • Componentes pequeños.

Si su componente supera las 300 líneas, es hora de hacer sashimi (cortarlo en rodajas). Los componentes más pequeños y de una sola responsabilidad son más fáciles de leer, probar y reutilizar.

  • Prop Drilling vs. Context vs. Zustand.

Prop drilling es como pasar ingredientes de mano en mano por la cocina: complicado y lento. Para un estado profundamente anidado pero específico de una sección, utiliza la API Context de React o librerías como Zustand. Para el estado global, Redux Toolkit o la sencilla API de Zustand pueden salvar tu cordura.

  • Evita el caos de los efectos secundarios.

Maneja los efectos secundarios de forma limpia. React Query es tu mejor amigo para la obtención de datos, mientras que los ganchos como useEffect deben permanecer centrados y concisos. Nunca sobrecargues los métodos del ciclo de vida: no son tu cajón de sastre.

Cortes de precisión: Prácticas de código limpio.

El buen sushi exige precisión. Lo mismo ocurre con el código fácil de mantener.

  • Convenciones de nomenclatura claras.

Evite nombres genéricos como handleClick. Sea específico: handleAddToCart. El código debe ser auto-documentado-los comentarios no deben explicar lo que hace una variable llamada -x-.

  • Hooks reutilizables.

Si ha escrito la misma lógica en dos lugares, enhorabuena, tiene un candidato para un gancho personalizado. Hooks como usePagination o useAuth encapsulan la lógica y mantienen tus componentes ligeros.

  • Styled-Components vs. TailwindCSS vs. SCSS.

Elige un enfoque de estilo y cíñete a él. Mezclar metodologías conduce al caos. Personalmente, me inclino por SCSS para diseños complejos y TailwindCSS para prototipos rápidos. Pero elijas lo que elijas, mantén tus estilos delimitados y evita el temido !important.

Presentación del plato: Pruebas y documentación.

Incluso el mejor sushi puede fallar si se sirve mal.

  • Biblioteca de pruebas de Jest y React.

Pruebas unitarias y pruebas de integración no son opcionales-son su wasabi y jengibre encurtido. Puede que piquen al escribirlas al principio, pero limpian el paladar al depurar.

  • Storybook.

Documenta tus componentes visualmente. Esto no sólo ayuda a su equipo, sino que también le da una sensación de orgullo al ver su biblioteca de componentes crecer en un hermoso menú.

  • Integración CI/CD.

Automatiza las pruebas y el linting. Git hooks con herramientas como Husky pueden garantizar que ningún pescado crudo (es decir, código no probado) llegue a producción.

Anécdota personal: La crisis del sushi.

Una vez heredé una base de código que se asemejaba al contenido de un cajón de basura: URLs de API mal codificadas, estado global para todo (incluso el menú de hamburguesa), y hojas de estilo llamadas styles1.css, styles2.css. Era un caos.

El punto de inflexión llegó cuando introduje la modularización. Reorganizamos la estructura de archivos, convertimos las constantes en enums y reescribimos los estilos en SCSS con nombres de clase adecuados. ¿El resultado? Una base de código tan limpia como un bar de sushi y un equipo que dejó de temer las revisiones de relaciones públicas.

Reflexiones finales: El Zen del Código.

El código limpio es como el sushi: parece simple, pero lograr esa simplicidad requiere habilidad, paciencia y disciplina. Centrándose en la capacidad de mantenimiento, las pruebas y la organización, puede convertir cualquier código base de espaguetis en una obra maestra de sushi.

Así que, la próxima vez que te enfrentes a un proyecto React desordenado, canaliza tu chef de sushi interior. Respira hondo, afila tus herramientas y enrolla con precisión. El resultado será tan satisfactorio como morder un sushi perfectamente enrollado: tus compañeros de equipo te lo agradecerán y tu yo del futuro brindará por ti con sake.

Feliz codificación, o como dicen los chefs de sushi, ¡Itadakimasu!