【发布时间】:2021-03-26 21:33:18
【问题描述】:
我有一个 Gatsby 和 Strapi 照片博客,我想要一个主页,一次加载 10 张图片,直到用户点击页面底部,然后加载接下来的 10 张等,这样用户就不会一次下载所有照片。
我最初使用useStaticQuery 加载图像。但是,这只能在构建时运行。当用户点击页面底部并将其添加到我的状态时,有没有办法进行另一个 graphQL 调用?或者这是静态站点生成器的“静态”部分????。
或者,如果我不渲染它,是否对所有照片数据进行 graphQL 调用会到达客户端设备?假设我一次只使用 React 渲染数组的一部分?
下面是我的主页。我使用的是Karl Run's bottom scroll listener,照片组件将照片呈现为列表。
const IndexLayout: React.FC<Props> = () => {
const [photosData, setPhotosData] = useState<InitialQueryType['allStrapiPhoto']>(getSiteMetaDataAndTenPhotos().allStrapiPhoto)
const handleOnDocumentBottom = useCallback(() => {
console.log('at bottom, make a call')
// this throws an invalid hook error as getTenPhotos calls useStaticQuery
let morePhotosData = getTenPhotos(photosData.edges.length)
setPhotosData({ ...photosData, ...morePhotosData })
}, [photosData])
useBottomScrollListener(handleOnDocumentBottom)
return (
<LayoutRoot>
<div className={styles.bigHomeContainer}>
<div className={styles.titleContainer}>
<h1 className={styles.indexHeading}>TayloredToTaylor's Wildlife Photos</h1>
</div>
<Photos photos={photosData} />
</div>
</LayoutRoot>
)
}
export default IndexLayout
【问题讨论】:
标签: javascript reactjs graphql gatsby