我正在学习React Native,我的搜索栏有问题,我把我的代码放在这里。
export default SearchBar = ({ setPokemonDetails, pokemonsList }) => {
const handlePokemonSearch = (text) => {
const filteredItems = pokemonsList.filter(item => {
return item.name.toLowerCase().includes(text.toLowerCase())
})
setPokemonDetails(filteredItems)
}
return (
<View style={styles.container}>
<TextInput style={styles.textInput} placeholder="Search Pokemon"
onChangeText={(text) => {
handlePokemonSearch(text)
}} />
</View>
);
}
这里是Home组件,我称之为de SearchBar组件:
export default function Home() {
const { pokemonDetails, setPokemonDetails, setIsLoading, isLoading, isError } = useFetchPokemons()
return (
<View style={{ padding: 10 }}>
<SearchBar setPokemonDetails={setPokemonDetails} pokemonsList={pokemonDetails} />
<FlatList
data={pokemonDetails}
keyExtractor={(item) => item.name}
renderItem={({ item }) => <Card pokemon={item} />}
/>
</View>
);
}
这段代码工作了一半,因为它在你写的时候过滤得很好,但是,当你删除一些字母时,它不会再次过滤。举例来说:
我有一个数组与此pokemons:
- 沙尔曼德
- 夏默龙
- 喷火龙
如果我写'魅力',搜索栏找到正确的只有2(Charmander和Charmeleon),但如果删除'm'字母,它不会显示3口袋妖怪再次和继续显示Charmander和Charmeleon。
有谁知道如何解决这个问题吗?
2条答案
按热度按时间o0lyfsai1#
我认为为了更好地诊断问题,我们需要看看您如何在主屏幕上调用
SearchBar
组件。是否是setPokemonDetails
设置了pokemonsList
的状态,导致了这个问题?例如,您可能不会使用两个单独的状态变量来存储PokemonList和PokemonDetails。我将在
handlePokemonSearch
中使用console.log(),看看pokemonsList
和filteredItems
如何随文本输入而变化。希望这能在任何小的方面有所帮助!
pw136qt22#
当您
setPokemonDetails(filteredItems)
时,您永久地修剪了<SearchBar />
在其pokemonsList
prop中接收的列表。在搜索项目时,您不想改变列表,您只想呈现一个过滤后的视图。因此,与设置列表本身不同,您需要跟踪搜索文本的一段新状态并设置它。例如: