Опции можно определять в виде массива объектов или в качестве дочерних элементов компонента. Первый способ подходит для случаев, когда опции требуют сложной подготовки и, возможно, запоминания. Второй способ удобен, когда опций немного и их настройка не требует сложных вычислений.
С помощью свойства option.data можно определить и сохранить уникальные данные в каждой опции. Это может быть полезно при необходимости обогащения данных с использованием обратного вызова onUpdate или, например, при отрисовке опций с помощью renderOption.
По умолчанию ширина контрола растягивается, чтобы соответствовать ширине содержимого выбранных опций. Вы можете самостоятельно регулировать ширину с помощью свойства width:
'max' — растягивает ширину контрола на всю ширину родительского элемента.
Для оптимального отображения большого количества опций в компоненте Selectпредусмотрен встроенный инструмент виртуализации списка. Виртуализация включается, когда количество опций превышает пороговое значение (по умолчанию 50). Пороговое значение можно изменить с помощью свойства virtualizationThreshold.
При включении виртуализации к элементу списка опций применяются определенные ограничения:
Ширина списка опций больше не изменяется в зависимости от длины самой длинной опции.
Минимальная ширина списка опций равна ширине контрола или 100px, если ширина контрола меньше 100px.
Для создания пользовательского контрола используйте свойство renderControl.
Обратите внимание, что для правильной работы контрола необходимо передать все аргументы в узел (как при использовании стандартной конфигурации).
Для отображения секции пользовательской фильтрации используйте свойство renderFilter и установите filterable в значение true.
Обратите внимание, что для правильной работы фильтра необходимо передать все аргументы в узел (как при использовании стандартной конфигурации).
Для отображения пользовательских опций используйте свойство renderOption:
importtype{SelectProps}from'@gravity-ui/uikit';import{Select}from'@gravity-ui/uikit';const renderOption:SelectProps['renderOption']=(option)=>{return<divstyle={{color: option.data.color}}>{option.children}</div>;};exportdefaultfunction(){return(<Selectplaceholder="Custom options"renderOption={renderOption}><Select.Optionvalue="val_1"data={{color:'#8FE1A1'}}> Value 1</Select.Option><Select.Optionvalue="val_2"data={{color:'#38C0A8'}}> Value 2</Select.Option><Select.Optionvalue="val_3"data={{color:'#3A7AC3'}}> Value 3</Select.Option><Select.Optionvalue="val_4"data={{color:'#534581'}}> Value 4</Select.Option></Select>);}
Для отображения выбранных пользовательских опций используйте свойство renderSelectedOption:
importtype{SelectProps}from'@gravity-ui/uikit';import{Select}from'@gravity-ui/uikit';const renderSelectedOption:SelectProps['renderSelectedOption']=(option)=>{return<divstyle={{color: option.data.color}}>{option.children}</div>;};exportdefaultfunction(){return(<Selectplaceholder="Custom selected options"renderSelectedOption={renderSelectedOption}><Select.Optionvalue="val_1"data={{color:'#8FE1A1'}}> Value 1</Select.Option><Select.Optionvalue="val_2"data={{color:'#38C0A8'}}> Value 2</Select.Option><Select.Optionvalue="val_3"data={{color:'#3A7AC3'}}> Value 3</Select.Option><Select.Optionvalue="val_4"data={{color:'#534581'}}> Value 4</Select.Option></Select>);}
Опции имеют фиксированную высоту, в соответсвии с заданным свойством size. Если нужно отобразить опции с разной высотой, используйте свойство option.data, которое будет содержать информацию о требуемой высоте опции, а также getOptionHeight для установки этого значения.
importtype{SelectProps}from'@gravity-ui/uikit';import{Select}from'@gravity-ui/uikit';const getOptionHeight:SelectProps['getOptionHeight']=(option)=> option.data.height;exportdefaultfunction(){return(<Selectplaceholder="Different heights"getOptionHeight={getOptionHeight}><Select.Optionvalue="val_1"data={{height:20}}> Value 1</Select.Option><Select.Optionvalue="val_2"data={{height:40}}> Value 2</Select.Option><Select.Optionvalue="val_3"data={{height:60}}> Value 3</Select.Option><Select.Optionvalue="val_4"data={{height:80}}> Value 4</Select.Option></Select>);}
Для отображения пользовательского счетчика опций используйте свойство renderCounter. Счетчик отображается только при включенном множественном выборе (multiple={true}) и hasCounter={true}.
Свойство renderPopup позволяет управлять содержимым списка опций: изменять порядок стандартных элементов (фильтр, список), скрывать их или добавлять собственные элементы между ними, до или после них.
importtype{SelectProps}from'@gravity-ui/uikit';import{Select}from'@gravity-ui/uikit';const renderPopup:SelectProps['renderPopup']=({renderList, renderFilter})=>{return(<>{renderFilter()}<divstyle={{width:'100%', height:20, backgroundColor:'tomato'}}/>{renderList()}</>);};exportdefaultfunction(){return(<Selectfilterableplaceholder="Custom popup"renderPopup={renderPopup}><Select.Optionvalue="val_1"data={{color:'#8FE1A1'}}> Value 1</Select.Option><Select.Optionvalue="val_2"data={{color:'#38C0A8'}}> Value 2</Select.Option><Select.Optionvalue="val_3"data={{color:'#3A7AC3'}}> Value 3</Select.Option><Select.Optionvalue="val_4"data={{color:'#534581'}}> Value 4</Select.Option></Select>);}
Это состояние Select указывает на некорректный ввод данных пользователем. Для изменения внешнего представления Select примените свойство validationState, задав ему значение "invalid". Опционально можно задать текст сообщения об ошибке через свойство errorMessage. По умолчанию текст сообщения выводится вне компонента.
Место вывода сообщения можно изменить с помощью свойства errorPlacement.