You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中使用getStaticPaths从Firestore获取动态数据失败

解决getStaticPaths结合Firebase Firestore出现404的问题

代码里的关键错误:

  • getStaticPaths误用getDoc:getDoc是获取单个文档的方法,要获取集合下所有文档来生成路径,必须用getDocs。你当前用getDoc(reference)得到的不是集合文档列表,而是无效快照,导致生成的paths为空或错误,直接触发404。
  • getStaticProps获取单个文档逻辑错误:await getDoc(reference) + id这种写法完全错误,正确流程是用doc(reference, id)创建对应ID的文档引用,再用getDoc获取该文档。
  • 未提取文档实际数据:获取文档快照后,必须调用.data()才能拿到文档内的字段数据,否则传给组件的是快照对象,无法直接访问ibizo属性。

修正后的完整代码:

import React from 'react'
import { db } from '@/Firebase';
import { collection, getDocs, doc, getDoc } from "firebase/firestore";

const reference = collection(db, "abantu");

export const getStaticPaths = async () => {
    // 获取集合下所有文档快照
    const snapshot = await getDocs(reference);

    const paths = snapshot.docs.map(doc => {
        return {
            params: { id: doc.id }
        }
    })

    return {
        paths,
        fallback: false
    }
}

export const getStaticProps = async (context) => {
    const id = context.params.id;
    // 创建对应ID的文档引用
    const docRef = doc(reference, id);
    // 获取单个文档快照
    const docSnapshot = await getDoc(docRef);
    
    // 处理文档不存在的情况
    if (!docSnapshot.exists()) {
        return { notFound: true }
    }

    return {
        props: {
            umuntu: docSnapshot.data()
        }
    }
}

function Details({ umuntu }) {
  return (
    <div>
        <h1>{umuntu.ibizo}</h1>
    </div>
  )
}

export default Details

内容的提问来源于stack exchange,提问作者Vuyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:10:23