Select With Query

Select With Query - это мощный компонент выпадающего списка, основанный на Autocomplete из HeroUI, с встроенной поддержкой асинхронной загрузки данных через React Query. Компонент предоставляет удобный API для работы с серверными данными, серверным поиском и легко интегрируется с React Hook Form.


Import

Usage

Базовый пример использования с простой загрузкой данных.

Важно: Компонент требует обертки в QueryClientProvider из @tanstack/react-query.

Основные возможности

С начальным значением

Вы можете задать начальное значение используя свойство value.

Серверный поиск

Включите серверный поиск с помощью enableSearch. Компонент автоматически добавит параметры поиска в запрос.

Интеграция с React Hook Form

Полная интеграция с React Hook Form для удобной работы с формами и валидацией.

Зависимые селекты

Легко реализуйте зависимые селекты, используя параметры запроса и условную загрузку данных.

Кастомный рендеринг

Настройте отображение опций и выбранного значения с помощью renderOption и renderValue.

С описанием

Добавьте описание для лучшего UX.

Валидация и состояния

С валидацией

Используйте валидацию совместно со свойствами isInvalid и errorMessage.

Disabled

Отключенное состояние блокирует взаимодействие с компонентом.

Стилизация

Sizes

Select With Query поддерживает три размера: sm, md (по умолчанию) и lg.

Variants

Select With Query поддерживает все варианты стилей из HeroUI Autocomplete.

Colors

Select With Query поддерживает различные цветовые темы.

React Query конфигурация

Query Options

Свойство queryOptions принимает объект или функцию, которая возвращает объект опций для useQuery из React Query.

Transform Data

Используйте transformData для преобразования данных из API в формат опций.

Серверный поиск

Для включения серверного поиска:

Свойства

SelectWithQuery Props

АтрибутТипОписаниеПо умолчанию
queryOptionsUseQueryOptions | ((params) => UseQueryOptions)Опции для React Query (обязательное)-
transformData(data: TData) => TTransformed[]Функция трансформации данных-
labelKeystringКлюч для label при дефолтной трансформации"label"
valueKeystringКлюч для value при дефолтной трансформации"value"
enableSearchbooleanВключить серверный поискfalse
searchParamNamestringИмя параметра поиска"search"
searchDebouncenumberЗадержка дебаунса поиска (мс)300
minSearchLengthnumberМинимальная длина запроса для поиска0
valuestring | number | nullТекущее выбранное значение-
defaultValuestring | number | nullЗначение по умолчанию-
onSelectionChange(value: string | number | null) => voidCallback при изменении-
getOptionValue(item: TTransformed) => string | numberФункция получения значения опции(item) => item.value
getOptionLabel(item: TTransformed) => stringФункция получения label опции(item) => item.label
renderOption(item: TTransformed) => ReactNodeКастомный рендер опции-
renderValue(item: TTransformed | null) => ReactNodeКастомный рендер выбранного значения-
emptyContentReactNodeКонтент при пустом списке"Нет доступных опций"
loadingContentReactNodeКонтент при загрузке"Загрузка..."
errorContentReactNode | ((error: TError) => ReactNode)Контент при ошибке-
onCreateItem() => voidCallback для создания нового элемента-
onSearchChange(value: string) => voidCallback при изменении поиска-

Наследуемые свойства Autocomplete

Select With Query наследует все свойства от HeroUI Autocomplete компонента:

  • label: Label для поля
  • placeholder: Placeholder текст
  • description: Описание под полем
  • errorMessage: Сообщение об ошибке
  • isInvalid: Флаг невалидного состояния
  • isDisabled: Флаг отключенного состояния
  • isReadOnly: Флаг только для чтения
  • isRequired: Флаг обязательного поля
  • labelPlacement: Позиция label (inside, outside, outside-left)
  • size: Размер компонента (sm, md, lg)
  • color: Цвет темы (default, primary, secondary, success, warning, danger)
  • variant: Вариант стиля (flat, bordered, faded, underlined)
  • radius: Радиус скругления
  • startContent: Контент слева от поля
  • endContent: Контент справа от поля
  • И другие свойства из Autocomplete API

Типизация

Select With Query поддерживает generic типы для типобезопасности:

Примеры использования

Работа с API

Зависимые запросы

Best Practices

  1. Query Keys: Используйте уникальные и описательные ключи запросов
  2. Transform Data: Всегда трансформируйте данные в единый формат для упрощения работы
  3. Error Handling: Обрабатывайте ошибки загрузки через errorContent
  4. Search Debounce: Используйте дебаунс для серверного поиска (300-500ms)
  5. Dependent Selects: Используйте enabled опцию в queryOptions для зависимых селектов
  6. TypeScript: Используйте generic типы для типобезопасности

Зависимости

  • @heroui/react - для базового Autocomplete компонента
  • @tanstack/react-query - для управления асинхронными данными
  • react-hook-form (опционально) - для интеграции с формами