Библиотека Slim Select предоставляет программный API для полного контроля над состоянием выпадающих списков без необходимости взаимодействия с DOM напрямую. Состояние компонента включает выбранные значения, список доступных опций, фильтр поиска, режимы доступности и внутренние флаги интерфейса. Управление этим состоянием через API позволяет синхронизировать UI с внешними источниками данных, серверными ответами и реактивными системами.
Внутреннее состояние Slim Select можно условно разделить на несколько логических блоков:
Каждый из этих элементов может изменяться программно через публичные методы экземпляра Slim Select.
При создании экземпляра сохраняется ссылка на объект управления:
const select = new SlimSelect({
select: '#mySelect'
});
Объект select становится точкой входа для всех операций
управления состоянием.
Основной механизм управления состоянием — метод установки выбранных значений. Он поддерживает как одиночный, так и множественный выбор.
select.set('value1');
Для мультиселекта:
select.set(['value1', 'value2', 'value3']);
При вызове метода происходит:
selected<select>Особенность заключается в том, что передаваемые значения должны
совпадать с value опций, а не с их текстовым
содержимым.
Сброс осуществляется передачей пустого значения:
select.set([]);
Для одиночного селекта допустимо:
select.set(null);
После сброса компонент возвращается в исходное состояние без активных выбранных элементов, при этом список опций сохраняется.
Slim Select позволяет динамически изменять доступные значения без пересоздания экземпляра.
select.setData([
{ text: 'Option A', value: 'a' },
{ text: 'Option B', value: 'b' }
]);
При выполнении операции:
optionsДобавление новых элементов без полной перезагрузки:
select.addData([
{ text: 'Option C', value: 'c' }
]);
Подход используется при реализации бесконечной прокрутки, подгрузки с сервера или incremental search.
Удаление конкретной опции по значению:
select.removeOption('value1');
При удалении:
optionsselectedСостояние поискового фильтра может контролироваться через API:
select.search('query');
или сбрасываться:
select.search('');
Фильтрация применяется к текущему набору опций без изменения исходного массива данных. Это позволяет реализовывать внешние поисковые панели или синхронизацию с другими компонентами интерфейса.
Состояние раскрытия контролируется напрямую:
select.open();
select.close();
Дополнительно доступно переключение:
select.toggle();
Состояние isOpen обновляется синхронно, что позволяет
привязывать логику интерфейса к моменту открытия списка.
Slim Select поддерживает режим блокировки взаимодействия:
select.disable();
select.enable();
В отключённом состоянии:
selectedПрограммное управление состоянием часто используется совместно с API-запросами:
fetch('/api/options')
.then(res => res.json())
.then(data => {
select.setData(data);
});
После получения данных:
При каскадных селектах состояние одного компонента влияет на другой:
countrySelect.set(['kz']);
citySelect.setData([
{ text: 'Karaganda', value: 'karaganda' },
{ text: 'Astana', value: 'astana' }
]);
citySelect.set([]);
Подобный подход позволяет реализовывать динамическую зависимость списков без глобального состояния.
В некоторых сценариях требуется синхронизация состояния без его изменения:
select.render();
Метод пересобирает визуальное представление на основе текущих данных
selected и options. Используется при внешнем
изменении DOM или вмешательстве других скриптов.
В режиме multiple состояние selected представляет массив
значений. Все операции учитывают этот факт:
Пример последовательного обновления:
select.set(['a']);
select.set([...select.selected(), 'b']);
Slim Select предоставляет события изменения состояния, которые позволяют отслеживать любые программные изменения:
Подписка на события позволяет синхронизировать внешнюю бизнес-логику с внутренним состоянием компонента без опроса DOM.
При использовании с реактивными фреймворками программное управление состоянием становится центральной точкой синхронизации. Slim Select выступает как внешний контролируемый компонент, где:
set и
setDataПри частом программном обновлении состояния необходимо учитывать:
<select> и внутренним состояниемСтабильность состояния обеспечивается последовательным применением API-методов без прямого вмешательства в DOM-структуру компонента.