Я пытаюсь сделать бесконечную прокрутку с моими данными, которые представляют собой массив. В большинстве примеров, которые я вижу, используется вызов API, и в него включено pages
, но у меня возникают проблемы с выполнением этого только с массивом и значениями, чтобы установить, сколько объектов загружается на прокрутку. Вот мой код.
import React, { useState, useEffect } from 'react'
import PropTypes from 'prop-types'
import InfiniteScroll from 'react-infinite-scroll-component'
const Scroll = ({ tweets }) => {
const [allTweets, setAllTweets] = useState(tweets)
const [hasMore, setHasmore] = useState(true)
const [lastPosition, setLastPosition] = useState(0)
const perPage = 4
const loadProducts = () => {
setTimeout(() => {
setAllTweets(...allTweets, tweets.slice(lastPosition, lastPosition + perPage))
}, 4000)
setLastPosition(lastPosition + perPage)
}
useEffect(() => {
loadProducts()
}, [allTweets])
return (
<InfiniteScroll
dataLength={allTweets.length}
next={loadProducts}
hasMore={hasMore}
endMessage={
<p style={{ textAlign: 'center' }}>
<b>Yay! You have seen it all</b>
</p>
}
loader={<h4>Loading...</h4>}
>
<div className="flex flex-col">
{allTweets &&
allTweets.slice(lastPosition, lastPosition + perPage).map((value, index) => {
return <div className="py-10 px-5">{value.body}</div>
})}
</div>
</InfiniteScroll>
)
}
export default Scroll
const perPage = 11; const [lastPosition, setLastPosition] = useState(perPage); const [allTweets, setAllTweets] = useState(tweets.slice(0, perPage)); const [hasMore, setHasmore] = useState(true); const loadProducts = () => { setTimeout(() => { setAllTweets((prev) => [...prev, ...tweets.slice(lastPosition, lastPosition + perPage)]); }, 4000); setLastPosition(lastPosition + perPage); };
07.11.2020