馃寑 Higher-Order Components (HOC) para reutilizar l贸gica
En React, un Higher-Order Component (HOC) es una t茅cnica avanzada para reutilizar l贸gica entre componentes. Se trata de una funci贸n que recibe un componente como argumento y devuelve un nuevo componente con funcionalidades adicionales.
Es un patr贸n muy 煤til cuando necesitamos compartir comportamiento entre varios componentes sin duplicar c贸digo, especialmente antes de la aparici贸n de los Hooks.
1️⃣ Estructura b谩sica de un HOC
Un HOC no modifica el componente original, sino que lo envuelve dentro de otro que a帽ade nueva l贸gica o props.
function withExtraInfo(WrappedComponent) {
return function EnhancedComponent(props) {
const extraData = "Informaci贸n adicional desde el HOC";
return <WrappedComponent {...props} extra={extraData} />;
};
}
Ahora podemos usarlo para envolver cualquier componente:
function Usuario({ nombre, extra }) {
return (
<div>
<h3>Hola, {nombre}</h3>
<p>{extra}</p>
</div>
);
}
const UsuarioConInfo = withExtraInfo(Usuario);
Hola, Jorge
Informaci贸n adicional desde el HOC
2️⃣ A帽adiendo l贸gica reutilizable
Supongamos que queremos que varios componentes muestren un indicador de carga (loading) mientras se obtienen datos.
function withLoading(WrappedComponent) {
return function EnhancedComponent({ isLoading, ...props }) {
if (isLoading) return <p>⏳ Cargando datos...</p>;
return <WrappedComponent {...props} />;
};
}
function ListaUsuarios({ usuarios }) {
return (
<ul>
{usuarios.map((u, i) => (
<li key={i}>{u}</li>
))}
</ul>
);
}
const ListaConLoading = withLoading(ListaUsuarios);
⏳ Cargando datos...
El HOC muestra el estado de carga antes de renderizar el componente principal.
3️⃣ Reutilizaci贸n en m煤ltiples componentes
Los HOC permiten aplicar el mismo comportamiento (por ejemplo, control de autenticaci贸n, permisos o datos compartidos) a varios componentes de forma consistente.
function withAuth(WrappedComponent) {
return function EnhancedComponent({ isAuthenticated, ...props }) {
if (!isAuthenticated) {
return <p style={{ color: "red" }}>馃毇 Acceso denegado</p>;
}
return <WrappedComponent {...props} />;
};
}
function PanelAdmin() {
return <h3>Bienvenido al panel de administraci贸n</h3>;
}
const PanelProtegido = withAuth(PanelAdmin);
馃毇 Acceso denegado
El HOC a帽ade control de autenticaci贸n antes de renderizar el componente protegido.
4️⃣ Buenas pr谩cticas con HOC
- ✅ Nombrar los HOC con el prefijo
with(ejemplo:withAuth,withLoading). - ✅ Mantenerlos puros: no modificar el componente recibido directamente.
- ✅ Evitar anidar demasiados HOC, ya que puede complicar la depuraci贸n.
- ✅ Usar Hooks cuando sea posible (son m谩s modernos y legibles).
5️⃣ Resumen
Los Higher-Order Components son una poderosa t茅cnica para reutilizar l贸gica de manera estructurada. Aunque los Hooks han reemplazado muchos casos de uso, los HOC siguen siendo 煤tiles en ciertos patrones avanzados o librer铆as de terceros.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias