Вам нужно вызвать вашу updateSearch
функцию, когда пользователь хочет найти покемона.
Есть несколько способов сделать это, например, вы можете сохранить отдельную кнопку для обработки функции отправки или вызова updateSearch
внутри onChangeText
компонента панели поиска, как показано ниже,
<SearchBar
placeholder="Search pokemon..."
onChangeText={this.updateSearch}
value={search}
/>
теперь измените updateSearch
для обработки текста поиска
updateSearch = (text) => {
this.setState({ search: text });
this.props.pokeFilter(this.state.search);
}
Также измените реквизиты SearchBarComponent
компонент как (, убедитесь, что вы используете правильное имя )
<SearchBarComponent pokeFilter={this.filterPokemon} style={GlobalStyles.searchBar}/>
Но вы должны сохранить временную переменную для хранения всех ваших покемонов. Потому что вам нужно отфильтровать данные от всех покемонов, когда пользователь переделал поле поиска.
componentDidMount() {
fetch(`https://pokeapi.co/api/v2/pokemon/?limit=27`)
.then((res) => res.json())
.then((response) => {
this.setState({
isLoading: false,
// keep a temp to store all pokemons
pokemons: response.results,
dataSource: response.results,
});
});
}
Теперь вы можете использовать функцию фильтра
filterPokemon = (textToSearch) => {
// load all pokemons from temp
const allPokemon = [...this.state.pokemons];
this.setState({
dataSource: allPokemon.filter(pokemon => pokemon.name.toLowerCase().includes(textToSearch.toLowerCase()))
});
}
Надеюсь, это поможет вам. Не стесняйтесь сомнений.