Hot Module Replacement (HMR) — это механизм, позволяющий обновлять модули приложения на лету без полной перезагрузки страницы. В контексте Slim.js HMR обеспечивает мгновенное отражение изменений в компонентах, шаблонах и стилях, что значительно ускоряет разработку интерфейсов.
HMR работает на основе модульной системы JavaScript. Каждый компонент Slim.js рассматривается как отдельный модуль с собственными состоянием, методами и шаблоном. Когда исходный файл изменяется:
Основное преимущество заключается в том, что DOM не перерисовывается полностью, а обновляются только измененные узлы. Это позволяет сохранять пользовательские данные в формах и текущие состояния компонентов.
Slim.js имеет встроенные хуки для интеграции с HMR. Ключевые элементы:
componentDidMount и componentWillUnmount —
используются для корректного монтирования и демонтажа компонентов при
замене модулей.Slim.hot — объект, предоставляющий методы для
регистрации HMR обработчиков.Пример базовой настройки HMR:
import Slim from 'slim-js';
Slim.hot.accept('./my-component.js', (updatedModule) => {
const oldComponent = document.querySelector('my-component');
if (oldComponent) {
oldComponent.replaceWith(new updatedModule.default());
}
});
В этом примере accept регистрирует обработчик для
конкретного модуля. При изменении my-component.js старая
версия заменяется новой без перезагрузки страницы.
HMR особенно полезен при сохранении состояния UI. Для этого
используется механизм state preservation:
import Slim from 'slim-js';
Slim.hot.accept('./counter.js', (updatedModule) => {
const oldCounter = document.querySelector('counter-component');
const currentState = oldCounter.getState(); // сохранение текущего состояния
const newCounter = new updatedModule.default();
newCounter.setState(currentState); // восстановление состояния
oldCounter.replaceWith(newCounter);
});
Методы getState и setState необходимо
реализовать в компоненте вручную. Это позволяет обновлять логику и
шаблон без потери пользовательских данных, таких как значения форм,
выбранные вкладки или счетчики.
Для полноценного использования HMR Slim.js нужно подключать к современным сборщикам, которые поддерживают горячую замену модулей:
webpack-hot-middleware и регистрация обработчиков через
Slim.hot.Пример с Vite:
if (import.meta.hot) {
import.meta.hot.accept((newModule) => {
Slim.hot.update(newModule);
});
}
HMR в Slim.js позволяет обновлять не только JavaScript-код, но и шаблоны или встроенные стили:
Slim.hot.accept('./my-component.css', () => {
const style = document.querySelector('#my-component-style');
if (style) style.textContent = import('./my-component.css').default;
});
HMR в Slim.js создаёт среду, где разработка интерфейсов становится интерактивной, а цикл «изменение → проверка → исправление» сокращается до нескольких миллисекунд, что особенно важно при работе с динамическими приложениями и компонентами с большим количеством состояний.