Publicado: Hace 8 días
Saber diseñar correctamente los props nos permitirá escalar y mantener nuestros componentes de manera más sencilla. Y qué mejor que verlo con un ejemplo de una de las librerías más populares en el mundillo de React: Material UI.
El botón es uno de los componentes más utilizados e importantes en cualquier aplicación. La mayoría de las veces lo empleamos como una llamada a la acción (call to action), por lo que su diseño y estructura son clave.
Seguramente en más de una ocasión te ha tocado crear un componente botón desde cero, y terminaste con varios componentes como:
O peor aún: un único componente con props mal estructurados — nombres poco claros, demasiados props, o incluso props con más de una responsabilidad.
Por ejemplo, un caso extremo podría verse así:
import React from "react"; const Button = ({ typeButton, // poco claro: ¿se refiere a variant, estilo o comportamiento? colorcito, // mal nombre, no estándar tamano, // mezcla idiomas (español/inglés) isDisable, // mala convención de nombres makeMagicStuff, // nombre poco claro alertMessage, // responsabilidad extra (mostrar alertas) withBorder, // otro boolean que podría ser parte de un style o variant onClick, // evento principal (mezclado con lógica extra) ...rest }) => { const handleClick = (e) => { if (onClick) onClick(e); if (makeMagicStuff) { console.log("✨ Haciendo cosas mágicas..."); } if (alertMessage) { alert(alertMessage); } }; const styles = { backgroundColor: colorcito || "gray", fontSize: tamano === "grande" ? "20px" : "14px", border: withBorder ? "2px solid black" : "none", opacity: isDisable ? 0.5 : 1, }; return ( <button type={typeButton || "button"} style={styles} disabled={isDisable} onClick={handleClick} {...rest} > {rest.label || "Botón sin nombre"} </button> ); }; export default Button;
La mente es libre y a muchos nos ha pasado hacer algo así. Pero tranquilo, si te identificaste, es totalmente normal: son errores comunes que forman parte del aprendizaje y que, al reconocerlos, nos ayudan a ser mejores cada día.
Veamos como Material UI resuelve el problema de los props en su componente Button.
Para agregar un ícono a un botón solemos usar un prop booleano que indique si debe mostrarse o no. El problema de hacer esto, es que limita la escalabilidad de nuestros componentes: ¿qué pasa si necesitamos un ícono específico o queremos variar su posición?
En lugar de complicarnos con listas de opciones o condiciones, Material UI resuelve este problema de manera elegante con los props startIcon y endIcon, ver figura 4.La importancia de definir buenos props es que permite que nuestros componentes sean fáciles de mantener, reutilizar y probar, tanto para quien los desarrolla como para quien los consume.
Como vimos en los ejemplos del componente Button de Material UI, sus props son claros respecto a la tarea que realizan, evitando confusiones sobre su comportamiento.
Si quieres aprender más sobre props, revisa la publicación: React props: buenas prácticas para código más limpio y escalable
NOTA: Si tienes dudas sobre el nombramiento de tus props o simplemente, necesitas inspiración, un buen punto de partida es revisar el API de los componentes de Material UI, ya que siguen convenciones consistentes y bien pensadas.
Los props son las propiedades que pasamos a nuestros componentes para modificar su apariencia o comportamiento. Definirlos correctamente es clave para lograr componentes reutilizables, fáciles de mantener y de probar.
Para lograrlo: