【发布时间】:2023-04-10 21:05:01
【问题描述】:
对于一个学校项目,我的小组正在构建一个表,该表通过数据库调用填充了城市数据。 表格组件的骨架是这样的:
import React, { useState } from 'react'
function Table(props) {
const [ cities, setCities ] = useState([])
const [ pageNum, setPageNum ] = useState(0)
useEffect(()=> { // this sets up the listener for the infinite scroll
document.querySelector(".TableComponent").onscroll = () => {
if (Math.ceil(table.scrollHeight - table.scrollTop) === table.clientHeight) showMoreRows()
}
//initial fetch
fetchData(0)
},[])
async function showMoreRows() {
console.log("Show more rows!")
await fetchData(pageNum)
}
async function fetchData(page) {
// some code, describing fetching
// EDIT2 start
console.log(pageNum)
// EDIT2 end
const jsonResponse = await {}// THE RESPONSE FROM THE FETCH
if(page) {
setCities([...cities, ...jsonResponse])
console.log("page is true", page)
setPageNum(pageNum + 1)
} else {
console.log("page is false", page) // this always runs and prints "page is false 0"
setCities([...cities, ...jsonResponse])
setPageNum(1)
}
}
return <div className="TableComponent"> { pageNum }
<!-- The rest of the component -->
</div>
}
该表格具有“无限滚动”功能,因此当您滚动到页面底部时,它会打印"Show more rows!" 并运行fetchData(pageNum) 以获取更多数据。此时,在初始提取之后,pageNum-变量应该是 1 或更大,但由于某种原因,该函数的行为就像是 0。我将 pageNum-变量显示在 JSX 中,然后我可以看到它是1,但是当我运行它时它仍然会打印出"page is false 0"。
当我尝试用谷歌搜索该问题时,似乎唯一类似的事情可能是我在使用 setPageNum 之后(重绘之前)过早地尝试读取 useState 变量,但就这里而言,情况并非如此我可以看到。我在两次尝试之间给了它足够的时间,它总是说pageNum 为零。
任何关于我做错了什么的想法,以及这有什么意义?
感谢您的帮助!
编辑:刚刚尝试了我写的代码,它似乎工作 - 但是我拥有的完整代码不起作用。任何人都对与此相关的问题有任何想法,即使上面的代码可能有效?
EDIT2:我在fetchData 函数中添加了一个console.log(pageNum),并进行了一些测试,似乎我在useState(VALUE) 中放入的初始值就是正在打印的内容。这对我来说 NO 有意义。
帮助。
EDIT3:添加了等待,在实际代码中已经有了它
EDIT4:我已经尝试了一段时间,但意识到当我使用 react 时,我可以将我拥有的滚动侦听器移动到 JSX 区域,然后它工作了——出于某种原因。现在可以了。无法真正将任何答案标记为正确答案,但问题在一定程度上得到了解决。
感谢所有试图提供帮助的人,非常感谢。
【问题讨论】:
-
您能否创建一个沙箱或其他东西来重现问题,以便我们检查代码以及它是如何工作的?
-
看起来
fetchData内的条件中的条件正在将您的页面0处理为false,您应该检查它是否大于或等于0,因为您正在检查数量如果页面存在,则页面不存在
标签: javascript reactjs q