在Promise中未捕获的Firebase错误:无效的文档引用
P粉759457420
P粉759457420 2023-09-10 19:04:52
[React讨论组]

import { getDocs, collection, query, doc, addDoc } from "firebase/firestore/lite";
import { useState } from "react";
import { db } from "../firebaseConfig";
import { useEffect } from "react";


function EndGame(startGame){
    const {startGameHandler} = startGame;
    const startGameClick = startGameHandler[0];
    const time = startGameHandler[1];
    const [leaderboard, setLeaderboard] = useState([]);    
    const [user, setUser] = useState("");
    const [username, setUsername] = useState("")
    const [isAnonymous, setIsAnonymous] = useState(false);
   
   const loginAnonymously = () =>{
    console.log("login hivas ", user)
    setUser(username)
    setIsAnonymous(true)
    }
   const setScore= async(timeprop, userprop)=>{
        console.log(time, user)
        await addDoc(doc(db, "Leaderboard"), {
        name: userprop,
        time: timeprop,
      })
    }
        async function getLeaderboard(){
            const q = query(collection(db, "Leaderboard"));
            const chacSnapShot =  await getDocs(q);
            const char = chacSnapShot.docs.map(doc => doc.data());
            setLeaderboard(char)
        }
       
   useEffect(()=>{
    setScore(time, user)
    getLeaderboard()
   }, [isAnonymous])
    
    return(
        
{!isAnonymous && (
setUsername(e.target.value)} />
)} {isAnonymous && (

Leaderboard

{leaderboard.map((data)=>{ return(

{data.name}

{data.time}

) })}
)}
) } export default EndGame

所以我有这个endgame组件,当它渲染时,由于某些原因,setScore函数被调用,我认为这就是我得到以下错误的原因:

未捕获(承诺中)FirebaseError:无效的文档引用。文档引用必须有偶数个段,但排行榜有 1 个。

在第27行。我是不是错了,认为是因为setScore在渲染时被调用?如果不是,问题/解决方案是什么?

在firebase中,我有一个Leaderboard集合,我希望从用户的时间和姓名创建文档(每个用户应该有1个文档)

P粉759457420
P粉759457420

全部回复(1)
P粉685757239

方法 addDoc 应该使用集合引用而不是文档引用。只有在想要指定文档名称时才会使用文档引用,此时应使用 setDoc,请参考下面的示例代码:

const setScore= async(timeprop, userprop)=>{
        console.log(time, user)
        await setDoc(doc(db, "Leaderboard", "<document-name>"), {
        name: userprop,
        time: timeprop,
      })
    }

要更正此问题,请查看下面的示例代码:

const setScore= async(timeprop, userprop)=>{
        console.log(time, user)
        await addDoc(collection(db, "Leaderboard"), {
        name: userprop,
        time: timeprop,
      })
    }

您可以查看此文档获取更多信息。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号