微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NextJS:如何正确使用 getStaticProps for firebase

如何解决NextJS:如何正确使用 getStaticProps for firebase

我对 NextJS 非常陌生,无法让 getStaticProps 正常工作。

import firebase from '../firebase'

export default function Home({ posts }) {
  return (
    <div>
      <h1>All Posts</h1>
      {posts.map((post) => (
        <div key={post.pid}>{post.title}</div>
      ))}
    </div>
  )
}

export const getStaticProps = async () => {
  let posts = []
  firebase
    .firestore()
    .collection('posts')
    .orderBy('createdAt','desc')
    .get()
    .then(function (querySnapshot) {
      querySnapshot.forEach(function (doc) {
        console.log(doc.data().title)
        console.log(doc.data().pid)
        posts.push({
          pid: doc.data().pid,title: doc.data().title,})
      })
      console.log(posts)
    })
    .catch(function (error) {
      console.log('Error getting documents: ',error)
    })

  return {
    props: {
      posts,},}
}

当我在 getStaticProps 中使用 console.log(posts) 时,我可以看到这些帖子,但不知何故它没有显示在 Home 组件中。任何帮助将不胜感激。

解决方法

问题是您没有等待从 get() 返回的承诺完成,因此返回一个空的 posts(您只在承诺返回后填充该变量,在 {{1} } 部分)。事实上,如果你把 then 放在 return 之前(而不是 observable 的 console.log(posts) 部分),你会看到那里是空的。

所以你只需要then它......类似(显然未经测试):

await

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。