У вас проблема с фокусом, потому что ваш компонент SearchBar
объявлен внутри компонента App
и воссоздается при каждом рендеринге. Вам нужно переместить SearchBar
из App
или просто переместить StyledInput
на место SearchBar
. Если вы выбираете первый способ, я рекомендую удалить React.Fragment
из SearchBar
, поскольку у него есть только один обработанный дочерний элемент:
function SearchBar(props) {
return (
<StyledInput
type="text"
id="search"
value={props.value}
placeholder="Search by name..."
onChange={props.onChange}
/>
);
}
И в App
:
<SearchBar onChange={handleSearch} value={search} />
Чтобы исправить предупреждение, вам всегда нужно возвращать логическое значение внутри функции filter
. Теперь вы ничего не возвращаете (т.е. undefined
) в случае, если character
не соответствует условию. Так что измените вашу filter
функцию так:
const filtered = characters.filter(character => {
return character.name.toLocaleLowerCase().indexOf(e.target.value) !== -1
});