#reactjs #autocomplete #components #antd #uicomponents
#reactjs #автозаполнение #Компоненты #antd #uicomponents
Вопрос:
Я пытаюсь использовать автозаполнение из Ant Design, но «onSelect» не запускается. Все остальное работает хорошо — когда я набираю в строке поиска, появляется мой список ингредиентов и фильтруется по назначению. Если я консольно регистрирую «данные» в onChange, отображаются значения поиска («данные»). Когда я нажимаю на элемент из моего отфильтрованного всплывающего меню, меню исчезает, значение во входных данных остается таким же, как и раньше (т. Е. Оно Не изменяется на выбранный элемент), и на консоль ничего не выводится. Что я делаю не так?
ОБНОВЛЕНИЕ: добавлена изолированная среда.
Заранее спасибо за вашу помощь.
export default function Searchbar() {
const [value, setValue] = useState('')
const [options, setOptions] = useState<{ value: string }[]>([]);
const ingredients = useSelector(state => state.ingredients);
const onSearch = (searchTerm: string) => {
setOptions(
!searchTerm ? [] : ingredients.filter(ferment =>
ferment.label.toLowerCase().includes(searchTerm.toLocaleLowerCase())
))
};
const onSelect = (data: string) => {
console.log("onSelect", data);
};
const onChange = (data: string) => {
setValue(data);
console.log(data)
};
return (
<>
<AutoComplete
options={options}
value={value}
style={{ width: 200 }}
onSelect={onSelect}
onSearch={onSearch}
onChange={onChange}
placeholder="looking for"
/>
</>
)
}
Комментарии:
1. Из того, что я могу сказать, это кажется правильным. Можете ли вы попробовать воспроизвести это в работающем codesandbox и связать его здесь в своем вопросе?
2. Только что добавлена песочница. Спасибо!
3. Я не могу запустить ваш codesandbox. Можете ли вы попробовать более простой вариант, который изолирует ваш
Searchbar
компонент и поведение?
Ответ №1:
<AutoComplete />
ожидает prop options
с элементами, которые должны иметь value
prop.
Вы передаете ingredients
as options
AutoComplete
, а ингредиенты не обладают этим свойством.
Это причина, по которой обратный onSelect
вызов не запускается.
Ответ №2:
При создании параметров поиска нам нужно указать value key :pair
, например value: item?.title,
, для onSelect, чтобы понять, какой из них был выбран.