Одним из базовых способов инициализации выпадающих списков с расширенными возможностями в библиотеке Choices.js является использование статически заданного массива данных. Такой подход применяется, когда набор опций известен заранее, не требует получения с сервера и не изменяется динамически в процессе работы приложения.
Статическая загрузка позволяет полностью контролировать структуру данных, ускоряет первичную инициализацию компонента и снижает зависимость от внешних источников. Это особенно актуально для форм фильтрации, настроек интерфейса, фиксированных справочников и локальных словарей.
Choices.js принимает массив объектов, каждый из которых описывает отдельный элемент списка. Минимально допустимая структура выглядит следующим образом:
value — значение, которое будет отправлено при
выбореlabel — текст, отображаемый пользователюconst choicesData = [
{ value: 'ru', label: 'Русский' },
{ value: 'en', label: 'English' },
{ value: 'de', label: 'Deutsch' }
];
Каждый объект в массиве представляет собой независимую опцию. При
этом value используется внутри логики приложения, а
label отвечает за визуальную часть интерфейса.
Для подключения статических данных необходимо передать массив через
параметр choices при создании экземпляра Choices.
import Choices from 'choices.js';
const select = document.querySelector('#language-select');
const instance = new Choices(select, {
choices: choicesData
});
После выполнения данного кода стандартный элемент
<select> заменяется кастомным интерфейсом, где
элементы формируются на основе массива.
Каждый элемент массива может содержать расширенные свойства, влияющие на поведение и отображение.
Для блокировки выбора конкретной опции используется свойство
disabled.
const choicesData = [
{ value: 'ru', label: 'Русский' },
{ value: 'en', label: 'English', disabled: true },
{ value: 'de', label: 'Deutsch' }
];
Отключённые элементы отображаются в списке, но не могут быть выбраны пользователем. Это удобно для временно недоступных вариантов.
Choices.js поддерживает структуру групп через поле
choices внутри объекта группы. Это позволяет логически
объединять элементы.
const groupedData = [
{
label: 'Европа',
id: 'europe',
choices: [
{ value: 'ru', label: 'Россия' },
{ value: 'de', label: 'Германия' },
{ value: 'fr', label: 'Франция' }
]
},
{
label: 'Азия',
id: 'asia',
choices: [
{ value: 'cn', label: 'Китай' },
{ value: 'jp', label: 'Япония' }
]
}
];
Группы позволяют структурировать большие списки и повышают читаемость интерфейса.
Если компонент инициализирован с опцией removeItem и
поддержкой множественного выбора, статический массив остаётся неизменным
источником данных, но поведение интерфейса меняется.
const instance = new Choices(select, {
choices: choicesData,
removeItemButton: true,
maxItemCount: 5
});
В этом режиме пользователь может выбирать несколько значений, а выбранные элементы отображаются как отдельные теги.
Статический массив может содержать специальные элементы-заглушки, используемые как подсказки или начальные состояния.
const choicesData = [
{ value: '', label: 'Выберите язык', disabled: true, selected: true },
{ value: 'ru', label: 'Русский' },
{ value: 'en', label: 'English' }
];
Такой подход позволяет эмулировать placeholder внутри списка,
несмотря на отсутствие полноценной поддержки placeholder в стандартных
<select>.
Несмотря на статическую природу данных, Choices.js позволяет дополнять список после инициализации. Это не изменяет исходный массив, но влияет на внутреннее состояние компонента.
instance.setChoices([
{ value: 'es', label: 'Español' }
], 'value', 'label', true);
Параметр true в конце означает замену текущего набора
значений.
Статические массивы удобно выносить в отдельные модули для переиспользования в разных частях приложения.
export const languageChoices = [
{ value: 'ru', label: 'Русский' },
{ value: 'en', label: 'English' },
{ value: 'de', label: 'Deutsch' }
];
Такой подход снижает дублирование кода и упрощает поддержку справочников.
При работе со статическими массивами важно соблюдать единообразие структуры объектов. Несоответствие ключей или отсутствие обязательных полей приводит к некорректному отображению списка или потере функциональности.
Ключевые требования:
value и labelvalueСтатическая загрузка эффективна только при фиксированном наборе данных. При увеличении объёма или необходимости частого обновления списка возникают ограничения:
В таких случаях логика загрузки обычно переносится на API или комбинируется с динамическими методами Choices.js.
Простой массив используется для небольших списков без логической структуры:
[
{ value: '1', label: 'Один' },
{ value: '2', label: 'Два' }
]
Групповой массив применяется при необходимости иерархии:
[
{
label: 'Числа',
choices: [
{ value: '1', label: 'Один' },
{ value: '2', label: 'Два' }
]
}
]
Выбор структуры зависит от сложности интерфейса и количества элементов.
При использовании статических массивов производительность напрямую зависит от размера входного массива. Choices.js оптимизирован для работы с умеренными списками, однако при значительном увеличении количества элементов возможны:
Рациональная структура и предварительная фильтрация данных до инициализации позволяют минимизировать нагрузку на интерфейс.