Я создаю приложение с React native. Я использую FlatList
с обработчиком onRefresh
:
<FlatList
data={data}
renderItem={renderPost}
keyExtractor={(item, index) => index.toString()}
onEndReached={handleLoadMore}
onEndReachedThreshold={0.5}
ListFooterComponent={renderFooter}
refreshing={isRefreshing}
onRefresh={handleRefresh}>
</FlatList>
В этом обработчике onRefresh
я сбрасываю список данных и получаю новые данные:
const handleRefresh = () => {
setData([]);
setIsRefreshing(true);
fetchData();
}
проблема в том, что data
никогда не устанавливается на []
. Я могу прочитать здесь, что это ожидаемое поведение: метод setState, не отражающий изменения немедленно .
Но что может быть лучше? Потому что когда я использую, useEffect
у меня та же проблема:
useEffect(() => {
setData([])
fetchData();
}, [isRefreshing]);
const handleRefresh = () => {
setIsRefreshing(true);
}
isRefreshing
никогда не устанавливается на true
.
Как лучше всего справиться с этим?
- РЕДАКТИРОВАТЬ
fethData
метод:
const fetchData = () => {
const url = 'my-api-url.com?page=' + page;
fetch(url, {
method: 'GET',
}).then((response) => response.json())
.then((json) => {
setData(data.concat(json.data));
setIsLoading(false);
setIsRefreshing(false);
});
}