[英]React Infinite scroll component not working properly
I am using react-infinite scroll component like this:我正在使用这样的反应无限滚动组件:
const [hasMore, setHasMore] = useState(true)
const [pageNumber, setPageNumber] = useState(1)
const fetchDataOnScroll = async () => {
try {
const res = await axios.get(
`${process.env.REACT_APP_API}/api/v1/posts?page=${pageNumber}`
)
(res.data.doc.length === 0) setHasMore(false)
setPosts((prev) => [...prev, ...res?.data?.doc])
setPageNumber((prev) => prev + 1)
} catch (error) {
alert('Error fetching Posts')
console.log('ERROR', error.data.response)
}
}
return (
<InfiniteScroll
hasMore={hasMore}
next={fetchDataOnScroll}
endMessage='No More Post'
dataLength={posts.length}
loader={<h1>LOADING...</h1>}
>
{posts.map((post) => (
<FeedCard key={post._id} post={post} />
))}
</InfiniteScroll>
)
I only get LOADING... on my browser.我只在我的浏览器上加载...。 But when I write my next as next={fetchDataOnScroll()}
, It renders continuously until the page freezes.但是当我将下一个写为next={fetchDataOnScroll()}
时,它会连续呈现,直到页面冻结。 I have to close my browser.我必须关闭我的浏览器。
How can i fix this?我怎样才能解决这个问题?
I suggest using useEffect and change page in next function.我建议在下一个函数中使用 useEffect 并更改页面。 I think this make some amount of delay that allow infinite scroll render current component.我认为这会产生一些延迟,允许无限滚动渲染当前组件。 This code solve my problem.这段代码解决了我的问题。
<InfiniteScroll
...
next={setPage(page+1)}
...>
And in useEffect function after changing page you can call api在更改页面后的 useEffect 函数中,您可以调用 api
useEffect(() => {
fetchDataOnScroll()
},[page]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.