Stimulus — это легковесный JavaScript-фреймворк, который позволяет связывать поведение с HTML через контроллеры. Основной принцип работы заключается в том, что HTML-элементы аннотируются с помощью специальных атрибутов, а контроллеры определяют логику взаимодействия. Ключевой этап интеграции Stimulus в приложение — регистрация контроллеров, которая обеспечивает их автоматическое связывание с DOM.
Для начала необходимо создать экземпляр приложения Stimulus. Обычно это выполняется в основном JavaScript-файле проекта:
import { Application } from "@hotwired/stimulus";
const application = Application.start();
Примечания:
Application.start() создаёт новый экземпляр приложения
Stimulus и возвращает объект, который управляет всеми
контроллерами.Контроллеры — это классы, которые наследуются от
Stimulus.Controller и содержат методы для управления
поведением элементов. Регистрация контроллера осуществляется с помощью
метода application.register():
import HelloController from "./controllers/hello_controller";
application.register("hello", HelloController);
Разбор параметров метода register:
data-controller. В примере выше
data-controller="hello".После регистрации Stimulus автоматически ищет все элементы с
атрибутом data-controller="hello" и связывает их с
соответствующим контроллером.
Контроллер в Stimulus имеет несколько ключевых компонентов:
import { Controller } from "@hotwired/stimulus";
export default class extends Controller {
static targets = ["output"];
connect() {
console.log("Контроллер подключен");
}
greet() {
this.outputTarget.textContent = "Привет, мир!";
}
}
Ключевые моменты:
connect() — метод жизненного цикла,
вызываемый при присоединении контроллера к DOM.targets — массив имен для элементов, с
которыми контроллер будет взаимодействовать.this.outputTarget — ссылка на элемент
с data-<controller>-target="output".Для больших приложений ручная регистрация каждого контроллера становится громоздкой. Stimulus поддерживает автоматическое подключение всех контроллеров из определённой директории с помощью контекста:
const context = require.context("./controllers", true, /\.js$/);
application.load(definitionsFromContext(context));
Принцип работы:
require.context сканирует директорию
./controllers и возвращает все файлы, соответствующие
шаблону.definitionsFromContext преобразует файлы в определения
контроллеров для регистрации в приложении.Контроллеры могут принимать опции при регистрации. Это полезно для глобальных настроек или переопределения значений по умолчанию:
application.register("hello", HelloController, { scope: "local" });
Особенности параметров:
register.scope позволяет ограничить область действия
контроллера, если есть необходимость использовать локальный контекст
внутри поддерева DOM.Stimulus позволяет регистрировать контроллеры в процессе работы приложения, что удобно для динамически загружаемых модулей:
async function loadController(name, path) {
const module = await import(path);
application.register(name, module.default);
}
loadController("dynamic", "./controllers/dynamic_controller.js");
Преимущества:
snake-case для HTML,
PascalCase для классов).Регистрация контроллеров — фундаментальная часть работы с Stimulus, обеспечивающая автоматическое связывание DOM с логикой поведения. Понимание различных методов регистрации, включая ручную, автоматическую и динамическую, позволяет строить масштабируемые и поддерживаемые фронтенд-приложения.