Hot Reload: recarga en caliente y cómo acelera el desarrollo

Autor: IT Sectr Publicado: 2026-07-03 Tiempo de lectura: 10 min

Hot Reload es una tecnología mediante la cual los cambios en el código fuente se aplican a una aplicación en ejecución sin recargar completamente la página y sin perder el estado actual. A diferencia de Live Reload, que simplemente actualiza la página entera, la recarga en caliente reemplaza solo los módulos modificados sobre la marcha. Según Webpack, 2024, Hot Module Replacement (HMR) reduce el tiempo del ciclo de desarrollo hasta en un 80% al preservar el estado de los componentes.

Puntos clave

  • Hot Reload es una tecnología para aplicar cambios de código al instante sin recargar la aplicación ni perder el estado.
  • El estado del componente se conserva durante la recarga en caliente — datos de formularios, scroll, ventanas modales abiertas.
  • HMR (Hot Module Replacement) es la implementación de Hot Reload en Webpack, Vite y otros empaquetadores.
  • React Fast Refresh es la implementación oficial para React, compatible con componentes funcionales y hooks.
  • El rendimiento del desarrollo mejora al reducir el tiempo entre el cambio de código y la visualización del resultado.

¿Qué es Hot Reload?

Hot Reload es un mecanismo de desarrollo mediante el cual los cambios en los archivos fuente se reflejan inmediatamente en una aplicación en ejecución sin reiniciarla. El desarrollador edita el código en el editor, guarda el archivo y el resultado es visible al instante en el navegador o emulador.

La característica clave de esta tecnología es la preservación del estado de la aplicación. Las variables en memoria, los datos en formularios, la navegación actual — todo permanece en su lugar. El desarrollador no necesita repetir una secuencia de acciones para volver a la pantalla requerida.

En el desarrollo web, Hot Reload se implementa a través del mecanismo Hot Module Replacement (HMR). El empaquetador monitorea los cambios en los archivos, determina qué módulos están afectados y envía el código actualizado al navegador mediante WebSocket. El navegador reemplaza solo esos módulos sin recargar la página.

La popularidad de Hot Reload se disparó con el auge de las aplicaciones de página única (SPA), donde una recarga completa de la página destruye todo el estado de la aplicación cliente. React, Vue, Angular y otros frameworks recomiendan HMR como modo principal de desarrollo.

Cómo funciona HMR dentro del empaquetador

El mecanismo HMR consta de cuatro etapas. El empaquetador del lado del servidor compila el módulo modificado, genera un parche JSON con la nueva versión del código y lo envía al navegador a través de una conexión WebSocket. El runtime HMR del lado del navegador recibe el parche, reemplaza el módulo antiguo por el nuevo y notifica a los suscriptores del módulo.

Etapa de compilación y envío

Webpack Dev Server utiliza WebSocket para comunicarse con el cliente. Cuando un archivo cambia, el empaquetador genera hot-update.js y hot-update.json con un manifiesto de cambios. El cliente carga automáticamente estos archivos mediante JSONP.

js
// webpack.config.js - configuración HMR
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  mode: 'development',
  devServer: {
    hot: true,
    liveReload: false
  },
  plugins: [new HtmlWebpackPlugin()]
};

Aplicación del módulo en el cliente

El runtime HMR en el navegador verifica si el módulo que se reemplaza admite accept. Si el módulo ha declarado module.hot.accept(), el runtime lo reemplaza in-place y ejecuta el callback de actualización. Si no se declara accept, HMR retrocede al nivel del módulo padre.

En React Fast Refresh, esta lógica está integrada a nivel del framework — no es necesario escribir manualmente module.hot.accept en cada archivo. El plugin de Babel react-refresh/babel agrega código que reemplaza componentes de forma segura sin perder el estado.

Diferencia entre Hot Reload, Live Reload y Full Reload

Estos tres términos a menudo se confunden, pero difieren radicalmente en su comportamiento. Live Reload recarga toda la página ante cualquier cambio — todo el estado se pierde. Full Reload ocurre cuando el servidor de desarrollo se reinicia por completo, perdiendo no solo el estado del cliente sino también el del servidor.

TipoRecarga de páginaPreservación de estadoVelocidad
Hot Reload (HMR)NoInstantáneo
Live ReloadNo1-3 seg
Full ReloadNo3-10 seg

La elección entre Hot y Live afecta directamente la velocidad de desarrollo. Con HMR, el ciclo “editar código → ver resultado” toma 50-200 ms. Con Live Reload — 1-3 segundos más el tiempo de restauración del contexto. A lo largo de un día laboral, la diferencia asciende a decenas de minutos de tiempo ahorrado.

React Fast Refresh: características para React

React Fast Refresh es la implementación oficial de Hot Reload optimizada para componentes de React. Reemplazó el antiguo mecanismo React Hot Loader, que era inestable y requería configuración manual. Fast Refresh está integrado en Create React App, Next.js, Vite y Webpack a través de react-refresh/babel.

Soporte de componentes funcionales

Fast Refresh preserva correctamente el estado de los componentes funcionales cuando su código cambia. Si solo cambia el marcado JSX, useState y otros hooks conservan sus valores. Si cambia la lógica del hook, el componente se vuelve a montar.

js
// Ejemplo: el estado se conserva cuando cambia JSX
import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>+</button>
    </div>
  );
}

Reglas de reemplazo seguro

Fast Refresh no preserva el estado si el nuevo código contiene un error de compilación. Si el componente no se exporta por defecto (named export), es posible que el estado tampoco se conserve. Se recomienda usar export default para los componentes y envolver las exportaciones en memo si se necesita garantizar la preservación del estado.

Herramientas de compilación con soporte HMR

Los empaquetadores modernos proporcionan HMR. Webpack es el pionero de HMR con configuración flexible a través de devServer.hot. Vite usa ESM nativo y esbuild para HMR instantáneo sin empaquetado. Parcel ofrece HMR zero-config. Turbopack es un nuevo empaquetador de Vercel con HMR basado en Rust.

HerramientaTipo de HMRConfiguraciónEcosistema
Webpack 5HMR mediante WebSocketdevServer.hot: trueReact, Vue, Angular
ViteHMR con ESM nativoIntegradoReact, Vue, Svelte
Parcel 2HMR zero-configNo requeridoReact, Vue, TS
TurbopackHMR incrementalIntegradoNext.js

Vite destaca en velocidad — HMR en Vite funciona a través de módulos ES nativos del navegador. Cuando un archivo cambia, Vite envía solo ese módulo mediante import(), sin recompilar todo el proyecto. Webpack compila cada módulo por completo, lo que ralentiza HMR en proyectos grandes.

Ejemplos de configuración de HMR en proyectos

Veamos la configuración de HMR para diferentes empaquetadores. En Webpack, hay que establecer hot: true en devServer y agregar react-refresh/babel. En Vite, HMR funciona de fábrica con cualquier preset. En Next.js, Fast Refresh está habilitado por defecto mediante el turbocompilador.

Vite con React

js
// vite.config.js
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  server: {
    hmr: {
      port: 3001
    }
  }
});

Webpack 5 con Fast Refresh

js
// webpack.config.js
const ReactRefreshWebpackPlugin =
  require('@pmmmwh/react-refresh-webpack-plugin');

module.exports = {
  mode: 'development',
  devServer: { hot: true },
  plugins: [new ReactRefreshWebpackPlugin()],
  module: {
    rules: [
      {
        test: /\.jsx?$/u,
        use: 'babel-loader'
      }
    ]
  }
};

Limitaciones y problemas de la recarga en caliente

HMR no funciona correctamente en todos los escenarios. Los módulos CSS con clases dinámicas pueden no aplicarse. Las variables globales y singletons (store de Redux, router) pueden reiniciarse al recargar. Las bibliotecas pesadas con HMR a veces pueden generar fugas de memoria debido al reemplazo de módulos sin GC.

La solución a los problemas de HMR es aislar el código caliente en componentes puros sin efectos secundarios. Los efectos secundarios (suscripciones a WebSocket, temporizadores) deben limpiarse en useEffect. Para Redux, se recomienda un persister que guarde el estado en sessionStorage. Las soluciones CSS como CSS Modules o styled-components funcionan correctamente con HMR sin configuración adicional.

Otra limitación es la depuración en producción: HMR se desactiva intencionalmente en las compilaciones de producción. El código fuente está minificado y el reemplazo en caliente en producción es imposible. Para depurar errores en producción, se usan source maps y registro, pero no HMR.

Preguntas frecuentes

¿En qué se diferencia Hot Reload de Live Reload?

Hot Reload reemplaza solo el módulo modificado sin recargar la página y conserva el estado. Live Reload recarga toda la página — el estado se pierde, la aplicación se inicia de nuevo desde la pantalla inicial.

¿Cómo activar Hot Reload en React?

En proyectos con Create React App y Vite, HMR está activado por defecto. En Webpack, hay que agregar devServer: { hot: true } y @pmmmwh/react-refresh-webpack-plugin. En Next.js, Fast Refresh funciona sin configuración.

¿Por qué Hot Reload no conserva el estado del componente?

La causa es un error de compilación en el nuevo código, un named export en lugar de default, un cambio en la firma del hook o una mutación directa del estado. React Fast Refresh reinicia el componente de forma segura solo cuando es necesario para el correcto funcionamiento.

¿Funciona Hot Reload con TypeScript?

Sí, todos los empaquetadores modernos soportan HMR con TypeScript. Vite usa esbuild para la transpilación de TS. Webpack usa ts-loader o babel con @babel/preset-typescript. Fast Refresh funciona correctamente con componentes tipados.

¿Cómo depurar cuando HMR no actualiza los cambios?

Verifica la consola del navegador para ver errores de conexión WebSocket. Asegúrate de que devServer.hot: true esté activado. Para Vite, verifica el puerto de HMR. Si el problema persiste, realiza una recarga completa de la página (F5) y verifica la consola del empaquetador.

Resumen

  • Hot Reload es una tecnología de reemplazo de código en caliente sin recarga ni pérdida de estado, la base del desarrollo moderno de SPA.
  • HMR se implementa mediante parches de módulos vía WebSocket, reemplazando solo los archivos modificados sin recompilación completa.
  • React Fast Refresh es la implementación oficial de HMR para React con soporte de hooks y componentes funcionales.
  • Vite, Webpack y Parcel proporcionan HMR de fábrica; Vite lidera en velocidad gracias a los ESM nativos.
  • Hot Reload conserva el estado solo si el módulo declara accept o se usa Fast Refresh con export default.
  • Los errores de compilación y los named export sin memo pueden reiniciar el estado durante el reemplazo en caliente.
  • Para Redux y el estado global, se recomienda un persister que guarde los datos en sessionStorage durante HMR.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también