Atomico — это современная библиотека для создания веб-компонентов на JavaScript с реактивным подходом. Для комфортной разработки ключевую роль играют dev server и HMR (Hot Module Replacement), которые обеспечивают мгновенное обновление компонентов без полной перезагрузки страницы.
Dev server — это локальный сервер, который автоматически обслуживает
проект во время разработки. В Atomico он конфигурируется через
@atomico/dev-server. Основные возможности:
Простейшая конфигурация dev server выглядит так:
// dev.server.js
import { createServer } from "@atomico/dev-server";
createServer({
root: "./src",
port: 3000,
open: true,
});
Параметр root указывает на корневую папку проекта,
port — порт локального сервера, open —
автоматическое открытие браузера.
HMR позволяет обновлять отдельные модули на лету,
сохраняя состояние приложения. В Atomico это реализуется через API
hmr и реактивные хуки.
HMR включается автоматически при запуске dev server в режиме разработки. Для явного контроля можно использовать следующий паттерн:
import { h, component, useState } from "atomico";
function Counter() {
const [count, setCount] = useState(0);
return (
<host>
<button oncl ick={() => setCount(count + 1)}>
{count}
</button>
</host>
);
}
Counter.props = {};
export const counter = component(Counter);
if (import.meta.hot) {
import.meta.hot.accept();
}
Ключевой момент — использование
import.meta.hot.accept(), которое позволяет модулю
обновляться без полной перезагрузки страницы. Состояние компонента
(count) при этом сохраняется.
HMR в Atomico особенно эффективно работает с реактивными хуками,
такими как useState, useEffect,
useReducer. Изменение функции компонента автоматически
триггерит перерисовку. Пример:
import { h, component, useState, useEffect } from "atomico";
function Timer() {
const [seconds, setSeconds] = useState(0);
useEffect(() => {
const id = setInterval(() => setSeconds(s => s + 1), 1000);
return () => clearInterval(id);
}, []);
return <host>{seconds}</host>;
}
export const timer = component(Timer);
if (import.meta.hot) import.meta.hot.accept();
В этом примере таймер продолжает отсчет при изменении кода компонента
благодаря HMR, так как состояние seconds сохраняется, а
эффект корректно очищается и пересоздается.
Dev server и HMR Atomico можно использовать совместно с:
Использование dev server и HMR делает процесс разработки с Atomico максимально эффективным, позволяя быстро тестировать и отлаживать компоненты без лишних перезагрузок и потери состояния.