Cómo crear un Higher Order Component con TypeScript

Clase 5 de 31Curso de React Avanzado

Resumen

Aprende a crear un high order component en React con TypeScript para mostrar un loader condicional. Verás cómo una función recibe un componente y devuelve otro, cómo tipar props genéricas con T y por qué, con la llegada de los hooks, este patrón se usa menos. Todo con un ejemplo claro: withLoading.

¿Qué es un high order component en React y para qué sirve?

Un high order component es una función que recibe un componente y devuelve otro componente. En React se usa para inyectar información, estilos o lógica de forma reutilizable. Aquí se aplica para mostrar un texto con loader según una prop booleana llamada isLoading.

  • Recibe un componente y retorna un componente envuelto con lógica extra.
  • Controla un loader con la prop booleana isLoading.
  • No hay llamada a API real: el estado se pone manualmente en true o false.
  • Separa responsabilidades: el HOC maneja el loading, el componente hijo renderiza el contenido.
  • Nota de contexto: hoy este patrón se usa menos por hooks y custom hooks.

¿Cómo implementar withLoading con TypeScript y props genéricas?

La clave es tipar el HOC con un genérico T para aceptar cualquier conjunto de props adicionales, y exigir que isLoading sea un booleano. Así el HOC es flexible y seguro.

  • T extiende de object para aceptar cualquier forma de props.
  • isLoading es estrictamente booleano: controla el loader.
  • Las demás props se pasan al componente original.
  • Se usa React.ComponentType para aceptar componentes funcionales o de clase.
  • El cast ayuda a preservar el tipo de las props originales.

¿Qué resuelve el tipado genérico T?

  • HOC reutilizable con distintos componentes y props.
  • Previene errores de tipos al pasar props no esperadas.
  • Mantiene la intelisense de TypeScript en componentes envueltos.

¿Cómo usar el HOC con un componente de usuario?

Primero se define un componente que recibe un nombre. Luego se envuelve con withLoading y se renderiza variando isLoading.

  • Con isLoading en true: muestra “Loading...”.
  • Con isLoading en false: renderiza el componente con “Hello, DevCode!”.
  • El HOC centraliza el comportamiento del loader y evita duplicar lógica.

¿Ya lo probaste? Comparte en comentarios cómo quedó tu withLoading y cuéntame si has usado high order components o si prefieres custom hooks para esta lógica.