【发布时间】:2022-01-20 19:24:32
【问题描述】:
我正在通过 getStaticProps() 异步获取 WordPress 帖子...
export async function getStaticProps({ params, preview = false, previewData }) {
const data = await getPostsByCategory(params.slug, preview, previewData)
return {
props: {
preview,
posts: data?.posts
},
}
}
...并将它们传递给useState:
const [filteredArticles, setFilteredArticles] = useState(posts?.edges)
然后,我将状态传递给组件:
router.isFallback ? (
// If we're still fetching data...
<div>Loading…</div>
) : (
<ArticleGrid myArticles={filteredArticles} />
这是必要的,因为另一个组件将setFilteredArticles 具有过滤功能。
但是当我们将状态传递给ArticlesGrid 时,组件加载时数据还没有准备好。这让我很困惑,因为我们在 router.isFallback 条件内传递状态。
即使我们在useEffect...内设置状态...
const [filteredArticles, setFilteredArticles] = useState()
useEffect(() => {
setFilteredArticles(posts)
}, [posts?.edges])
...对于组件来说,数据到达太晚了。
我是 Next.js 的新手。我可能可以破解这个问题,但我认为有一个优雅的解决方案。
【问题讨论】:
标签: javascript reactjs asynchronous next.js use-state