【发布时间】:2021-01-05 20:36:14
【问题描述】:
所以我正在使用 FlatList 列出一些 D&D 生物,并且我正在尝试实现一个搜索栏,用户可以在其中直接找到他们正在寻找的东西。
function LandingPage() {
const [referencesList, setReferencesList] = useState([])
const [search, setSearch] = useState('')
const [page, setPage] = useState(1)
const renderItem = ({ item }) => (
<ReferenceItem name={`${item.name} CR: ${item.challenge_rating}`} key={item.slug} index={item.slug}/>
)
useEffect(() => {
api.get('/', {
params: {
fields: ['slug', 'name', 'challenge_rating'].join(),
limit: 100,
ordering: 'slug',
search,
page
}
}).then( response => {
setReferencesList([...referencesList, ...response.data.results])
}).catch( error =>
console.log(error)
)
}, [search, page])
return (
<View style={styles.container}>
<PageHeader title="Monsters List">
<SearchReferences search={setSearch}/>
</PageHeader>
<FlatList
data={referencesList}
renderItem={renderItem}
keyExtractor={item => item.slug}
onEndReachedThreshold={40}
onEndReached={() => setPage(page + 1)}
/>
</View>
)
}
export default LandingPage
问题是,每次我尝试搜索某些内容时,它实际上都会将结果添加到我已有的列表中。我试图这样解决这个问题:
.then( response => {
let referencesResults = search === '' ? response.data.results : [...referencesList, ...response.data.results]
setReferencesList(referencesResults)
})
但是现在当我搜索某些内容然后擦除搜索时,它不会回到我列表的初始状态。有人可以帮我吗?或者至少给我指明一个方向。
【问题讨论】:
标签: android reactjs react-native mobile react-native-flatlist