简体   繁体   English

React Infinite 滚动组件无法正常工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM