Gabriel Jiménez | Hace 3 meses
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: