Скрытие меню
Вам необходимо добавить собственную логику для отображения меню, поскольку ложные значения для emptyLabel
больше не скрывают меню в v4.Из документов миграции :
Это было устаревшим решением, введенным до того, как renderMenu
мог вернуть null
.Это больше не так, и теперь необходимо использовать renderMenu для достижения поведения
Вы можете скрыть меню, когда результатов нет, передав следующее renderMenu
:
<Typeahead
...
renderMenu={(results, menuProps) => {
// Hide the menu when there are no results.
if (!results.length) {
return null;
}
return <TypeaheadMenu {...menuProps} options={results} />;
}}
/>
Отправка формы
Блоки заголовка типа формируют отправку, когда меню открыто, чтобы предотвратить непреднамеренную отправку.Вы можете обойти это, добавив следующее:
<Typeahead
...
onKeyDown={(e) => {
// Submit the form when the user hits enter.
if (e.keyCode === 13) {
this.form.submit();
}
}}
/>
Соберите все вместе
<form ref={(form) => this.form = form}>
<Typeahead
id="rbt-example"
onKeyDown={(e) => {
// Submit the form when the user hits enter.
if (e.keyCode === 13) {
this.form.submit();
}
}}
options={options}
placeholder="Type your queries here..."
renderMenu={(results, menuProps) => {
// Hide the menu when there are no results.
if (!results.length) {
return null;
}
return <TypeaheadMenu {...menuProps} options={results} />;
}}
/>
<button type="submit">Submit</button>
</form>
Живой пример: https://codesandbox.io/s/react-bootstrap-typeahead-rtb1s