reactjs - React 中的无限滚动
问题描述
我正在尝试在我的组件中添加无限滚动。我以某种方式做到了,但它没有按预期工作。每当我滚动到底部时,它会添加更多数据,APIData
但它只是复制已经获取的数据,而不是添加新数据。而且,即使我处于底部,滚动功能仍然会运行并一次又一次地获取已经获取的数据。而且我还收到一个警告,说我没有包含getData
在依赖数组中。发生了什么,为什么?
export default function News({ category }) {
const [APIData, setAPIData] = useState([])
const [page, setPage] = useState(1)
const pageSize = 20
async function getData() {
let response = await fetch(`https://newsapi.org/v2/top-headlines?country=in&category=${category}&pageSize=${pageSize}&page=${page}&apiKey={APIKey}`)
let parsedResponse = await response.json()
setAPIData(APIData.concat(parsedResponse.articles))
}
useEffect(() => {
getData()
}, [category])
window.addEventListener('scroll', function () {
if (window.innerHeight + document.documentElement.scrollTop === document.scrollingElement.scrollHeight && page === 1) {
setPage(2)
getData()
console.log('working')
}
}
)
解决方案
这很可能是由于这个https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous
您可以通过控制台验证getData函数中的页面没有
async function getData(category,page) {
let response = await fetch(`https://newsapi.org/v2/top-headlines?country=in&category=${category}&pageSize=${pageSize}&page=${page}&apiKey={APIKey}`)
let parsedResponse = await response.json()
setAPIData(APIData.concat(parsedResponse.articles))
}
useEffect(() => {
getData(category,page)
}, [category,page])
window.addEventListener('scroll', function () {
if (window.innerHeight + document.documentElement.scrollTop === document.scrollingElement.scrollHeight && page === 1) {
setPage(2)
console.log('working')
}
}
推荐阅读
- python - 尝试通过 cmd 行安装软件包时出错
- php - 在 Laravel 中对结果进行排序
- google-cloud-platform - gsutil 列出存储桶中已删除的所有文件
- php - 在 WordPress 数据库中,为什么 GUID 与实时 URL 不同?
- mongodb - 使用 api rest 验证现有电子邮件
- r - Markdown 不会编织 pdf 或 html,给出致命错误:为“-e”创建临时文件失败”
- javascript - 基本 HTML 按钮不更改文本
- autodesk-forge - Autodesk Forge TokenFlex API:针对chargedItemID 的POST 查询BadRequestError
- docker - 有没有办法使用特定版本的 nuget 运行“dotnet nuget”?
- mysql - 如何忽略 group_concat 中的空格