Stimulus — это легковесный JavaScript-фреймворк, ориентированный на улучшение HTML через декларативные контроллеры. Ключевым аспектом эффективной работы с ним является строгая организация кода и соблюдение соглашений по именованию. Это упрощает поддержку проектов, делает код предсказуемым и читаемым, а также снижает вероятность ошибок при масштабировании приложений.
Контроллеры в Stimulus регистрируются через метод
application.register. Имя контроллера состоит из
двух частей, разделённых дефисом:
application.register("user-profile", UserProfileController)
Правила:
kebab-case).Controller: UserProfileController.Пример соответствия:
| HTML имя контроллера | JS класс контроллера |
|---|---|
data-controller="cart-items" |
CartItemsController |
data-controller="search-form" |
SearchFormController |
Stimulus использует синтаксис data-action для привязки
событий к методам контроллера:
<button data-action="click->user-profile#toggleDetails">Показать детали</button>
Правила:
click, submit,
input).toggleDetails).Целевые элементы объявляются через
data-<controller>-target:
<div data-controller="user-profile">
<p data-user-profile-target="name"></p>
<button data-user-profile-target="button">Изменить</button>
</div>
Правила:
inputField, submitButton,
modalContent.this.targets.findAll("targetName").Контроллер Stimulus обычно разделяется на несколько категорий методов:
Lifecycle методы
connect() — вызывается при подключении контроллера к
DOM.disconnect() — вызывается при удалении контроллера из
DOM.initialize() — вызывается до connect(),
подходит для установки начальных состояний.Методы действий
data-action.Приватные методы
_ или помечаются как приватные
через соглашение.Геттеры и сеттеры для целей
this.targetNameTarget или коллекциям через
this.targetNameTargets.Пример структуры контроллера:
import { Controller } from "@hotwired/stimulus"
export default class UserProfileController extends Controller {
static targets = ["name", "button"]
initialize() {
this._setupDefaults()
}
connect() {
console.log("Контроллер подключен")
}
disconnect() {
console.log("Контроллер отключен")
}
toggleDetails(event) {
event.preventDefault()
this._toggleVisibility(this.nameTarget)
}
_setupDefaults() {
this.nameTarget.textContent = "Неизвестный пользователь"
}
_toggleVisibility(element) {
element.hidden = !element.hidden
}
}
Stimulus поддерживает несколько статических свойств:
Пример использования values:
static values = {
count: Number,
visible: Boolean
}
increment() {
this.countValue++
this.visibleValue = !this.visibleValue
}
Свойства countValue и visibleValue
автоматически синхронизируются с HTML атрибутами
data-user-profile-count-value и
data-user-profile-visible-value.
data-controller,
data-<controller>-target, data-action,
data-<controller>-value.Пример:
<div data-controller="user-profile" data-user-profile-count-value="0">
<p data-user-profile-target="name"></p>
<button data-user-profile-target="button" data-action="click->user-profile#increment">
Увеличить
</button>
</div>
targets,
values, classes для декларативного
управления.Эти соглашения обеспечивают предсказуемость, читаемость и поддержку кода, особенно в крупных проектах с множеством контроллеров.