Los HoC son componentes que buscan abstraer funcionalidad que se repite en varios componentes, y agregarla como add-ons a otros componentes que podemos ir creando.
Más concretamente, un High Order Component es una función que toma como parámetro un componente, y devuelve otro componente.
Esto lo podemos ver con un ejemplo más concreto. Supongamos que tenemos un Form en donde se puse un nombre de usuario y un password, y al hacer click en el botón de Iniciar sesión, queremos que se muestre un componente de Loading, para darle un poco de feedback al usuario de que estamos trabajando.
Con este código podemos lograr esto, ¿pero qué sucede si tenemos otro componente que al hacer alguna otra acción?, ¿necesitamos hacer el mismo comportamiento? Aquí es donde entra el High Order Component.
Veamos como queda:
Por otro lado, actualizamos nuestro componente original:
La linea importante es la ultima, donde estamos invocando a la función del HOC con nuestro componente Form, por lo tanto, va a agregarle el comportamiento de mostrar el Loader.