我正在从服务器获取数据(图片和描述),并使用它们无限滚动。当我滚动到页面底部时,我想更改状态值(我们从中收集数据的页面的值)。
当我这样做的时候,有些事情出错了。仅在第二次和下次正确更新状态。
代码:
class Gallery extends Component {
state = {
photos: [],
searchValue: "dog",
page: 1,
totalPages: null
};
getPhotos = () => {
const { photos, searchValue, page, totalPages } = this.state;
axios.get(`api_key=${API_KEY}&tags=${searchValue}&page=${page}`)
.then(res => {
this.setState({
photos: [...photos, ...res.data.photos.photo],
totalPages: res.data.photos.pages
});
if (page < totalPages) {
this.setState(prevState => ({ page: prevState.page + 1 }));
console.log(page); // returns 1 on the first call, but should return 2;
}
})
};
render() {
const { photos, page, totalPages, loading } = this.state;
return (
<div className={classes.Content}>
<InfiniteScroll
pageStart={page}
loadMore={this.getPhotos}
hasMore={page < totalPages}
loader={<Spinner />}
>
<Photos photos={photos} />
</InfiniteScroll>
</div>
);
}
}
现在的问题是:
if (page < totalPages) {
this.setState(prevState => ({ page: prevState.page + 1 }));
}
在第一个函数调用中,page是1,但在我的逻辑中应该是2。在接下来的通话中,一切正常(第2、3、4页等)。目前,我正在加载两倍相同的照片。你能帮助我吗?