Mithril — это современный, минималистичный JavaScript-фреймворк для построения одностраничных приложений. Он ориентирован на высокую производительность и лёгкость кода. Для начала работы достаточно подключить библиотеку через npm или CDN.
Через npm:
npm install mithril
После установки импорт в проект выполняется стандартным способом:
import m from 'mithril';
Через CDN:
<script src="https://unpkg.com/mithril/mithril.js"></script>
В обоих случаях объект m предоставляет весь функционал
фреймворка: создание компонентов, маршрутизацию, работу с виртуальным
DOM и асинхронные запросы.
Рекомендуемая структура проекта при использовании Mithril выглядит следующим образом:
/project-root
/src
/components
Header.js
Footer.js
MainContent.js
/routes
home.js
about.js
index.js
package.json
index.html
Такое разделение облегчает поддержку и масштабирование приложения.
Для полноценной разработки с Mithril обычно используют сборщики типа Webpack или Vite. В случае Vite настройка минимальна:
npm create vite@latest my-mithril-app --template vanilla
cd my-mithril-app
npm install
npm install mithril
npm run dev
Главное — убедиться, что файлы .js корректно
транспилируются и подключаются к HTML. Это позволит использовать
современные возможности JavaScript и модульную структуру
компонентов.
Компоненты в Mithril — это объекты с методами view и,
опционально, oninit, oncreate,
onupdate.
Пример простого компонента:
const Counter = {
count: 0,
view: () => m("div", [
m("button", { onclick: () => Counter.count-- }, "-"),
m("span", ` ${Counter.count} `),
m("button", { onclick: () => Counter.count++ }, "+")
])
};
view возвращает виртуальный DOM.onclick) связываются напрямую с методами или
свойствами компонента.Mithril имеет встроенный роутер, работающий без дополнительных библиотек:
m.route(document.body, "/", {
"/": Home,
"/about": About
});
document.body — элемент, куда рендерится
приложение."/" — путь по умолчанию.Маршруты поддерживают динамические параметры:
m.route(document.body, "/user/:id", {
"/user/:id": UserProfile
});
В компоненте доступ к параметрам через
m.route.param("id").
Для работы с API используется встроенный метод
m.request.
Пример запроса:
m.request({
method: "GET",
url: "/api/users"
}).then(users => {
UserList.users = users;
});
method — HTTP-метод.url — адрес API.Интеграция с компонентами происходит через обновление состояния и вызов рендера:
const UserList = {
users: [],
oninit: () => {
m.request({ method: "GET", url: "/api/users" })
.then(data => UserList.users = data);
},
view: () => m("ul", UserList.users.map(u => m("li", u.name)))
};
Для отладки Mithril приложений подходят стандартные инструменты браузера и специализированные расширения:
m.mount и логировать каждый рендер.Для отслеживания изменений состояния компонентов удобно создавать отдельные функции логирования:
function logState(component) {
console.log(`${component}:`, JSON.parse(JSON.stringify(component)));
}
Современные сборщики позволяют автоматически перезагружать приложение при изменении исходного кода:
webpack-dev-server с опцией hot: true.Это ускоряет разработку и позволяет видеть изменения без ручной перезагрузки страницы.
view для простоты
синтаксиса.oninit или
отдельные методы для предсказуемости рендера.Эти принципы позволяют создавать масштабируемые приложения на Mithril с чистой архитектурой и эффективной отладкой.