当前,API调用是在将API数据存储在Singleton中的根组件之一中完成的。
此单例数据必须由getStaticPaths()访问,但是由于getStaticPaths()预先将其渲染,因此单例为空并返回空对象。
我如何将路径数据发送到getStaticPaths()以便它动态接收数据,或在一段时间后执行它?
答案 0 :(得分:0)
如果您可以在此处显示一些代码并更好地解释您的目标,那就更好了。据我了解-您正在进行API调用(通过getServerSideProps()?),并且可能需要获取一些数据,才能通过getStaticPaths()方法来决定在构建时呈现哪个页面。
可能的解决方案是仅从getStaticPaths()方法进行API调用。我不明白为什么要在getStaticPaths()中使用其他函数进行API调用。这是来自官方文档的解决方案-
// This function gets called at build time
export async function getStaticPaths() {
// Call an external API endpoint to get posts
const res = await fetch('https://.../posts')
const posts = await res.json()
// Get the paths we want to pre-render based on posts
const paths = posts.map((post) => ({
params: { id: post.id },
}))
// We'll pre-render only these paths at build time.
// { fallback: false } means other routes should 404.
return { paths, fallback: false }
}
此单例数据必须由getStaticPaths()访问,但是由于getStaticPaths()预先将其渲染,因此单例为空并返回空对象。
由于getStaticPaths()是一个异步函数,您将不会获得空对象,因为它将等待API请求完成。拥有数据后,您可以根据需要在getStaticPaths()函数中使用它。
如何将路径数据发送到getStaticPaths()以便它动态接收数据,或在一段时间后执行?
getStaticPaths()在构建时仅运行一次,您无法随时调用它。如果您想延迟执行它,那将无法完成,但我认为这不会达到您的目的。
官方文档非常全面,请仔细阅读它们以更好地了解这些数据获取方法-https://nextjs.org/docs/basic-features/data-fetching