Stimulus — это легковесный JavaScript-фреймворк, который расширяет возможности HTML через декларативное связывание данных и поведения. Одной из центральных концепций является использование значений (values), которые позволяют передавать параметры в контроллеры, аналогично props в других фреймворках. Значения делают код контроллеров более гибким, читаемым и переиспользуемым.
Для начала значения объявляются внутри контроллера с помощью
статического свойства values. Это объект, в котором ключи —
это имена значений, а значения — их типы:
import { Controller } from "@hotwired/stimulus";
export default class extends Controller {
static values = {
count: Number,
name: String,
visible: Boolean
}
connect() {
console.log(this.countValue); // Получение значения count
console.log(this.nameValue); // Получение значения name
console.log(this.visibleValue); // Получение значения visible
}
}
Ключевые моменты:
Value.Number, String,
Boolean, Array, Object) позволяет
Stimulus автоматически приводить данные из HTML к нужному типу.0 для Number, "" для String,
false для Boolean, [] для Array,
{} для Object).Для передачи значений контроллеру используются атрибуты
data-<controller>-<value>-value:
<div data-controller="example"
data-example-count-value="5"
data-example-name-value="Stimulus"
data-example-visible-value="true">
</div>
Здесь:
data-example-count-value →
this.countValuedata-example-name-value →
this.nameValuedata-example-visible-value →
this.visibleValueStimulus автоматически парсит строки и конвертирует их в нужные типы на основе объявленного в контроллере типа.
Stimulus позволяет отслеживать изменения значений
через методы с суффиксом ValueChanged. Это полезно для
динамических интерфейсов:
countValueChanged(oldValue, newValue) {
console.log(`Count изменился с ${oldValue} на ${newValue}`);
}
При изменении this.countValue этот метод автоматически
вызывается, что позволяет контроллеру реагировать на динамические
изменения данных без ручного подписывания на события.
Значения делают контроллеры полностью настраиваемыми через HTML:
static values = {
color: String,
size: Number
}
updateStyle() {
this.element.style.color = this.colorValue;
this.element.style.fontSize = `${this.sizeValue}px`;
}
<div data-controller="style"
data-style-color-value="red"
data-style-size-value="20">
Пример текста
</div>
Такой подход позволяет использовать один контроллер для множества элементов с различной конфигурацией без дублирования кода.
Stimulus поддерживает не только примитивы, но и сложные структуры:
static values = {
settings: Object,
tags: Array
}
connect() {
console.log(this.settingsValue.theme); // доступ к объекту
console.log(this.tagsValue.join(", ")); // работа с массивом
}
HTML может содержать JSON для сложных значений:
<div data-controller="config"
data-config-settings-value='{"theme":"dark","layout":"grid"}'
data-config-tags-value='["news","sports"]'>
</div>
Stimulus автоматически преобразует строки JSON в объекты и массивы, что упрощает передачу сложных конфигураций через HTML.
ValueChanged
позволяют реагировать на изменения без лишней логики событий.static values.data-<controller>-<value>-value.this.<name>Value.<name>ValueChanged(oldValue, newValue).Значения делают Stimulus мощным инструментом для создания динамичных интерфейсов, сохраняя простоту и декларативность. Контроллеры становятся конфигурируемыми и легко расширяемыми, что идеально подходит для масштабируемых проектов.