繁体   English   中英

为什么我收到“类型错误:文档不是函数”(Firebase 9、Firestore)

[英]Why I receive "TypeError: doc is not a function" (Firebase 9, Firestore)

我尝试使用自定义 ID 在 Firestore 中添加用户。

import { db } from "../firebase/config";
import {collection, addDoc, deleteDoc, updateDoc, doc, setDoc} from 'firebase/firestore'
 
export const useFirestore = (collections) => {

    const addDocumentUser = async (doc, id) => {
        try{
            const addedDocument = await setDoc(doc(db, collections, id), {...doc});
            return addedDocument.id
            
        }
        catch(err){
            console.log(err)
            dispatch({type: 'ERROR', payload: err})
        }
    }
    

    return {addDocumentUser}
}

当我运行它时,我在控制台中收到以下错误:

TypeError: doc is not a function
    at addDocumentUser (useFirestore.js:62:1)
    at useSignup.js:29:1
    at async signup (useSignup.js:23:1)
    at async handleSubmit (Signup.js:23:1)

我做错了什么? 我导入了所有内容,数据库访问适用于没有自定义 ID 的函数 (addDoc)。

问题是您正在重新定义doc ,因此它有两个定义:

import { db } from "../firebase/config";
import {collection, addDoc, deleteDoc, updateDoc, doc, setDoc} from 'firebase/firestore'
                                                // 👆
 
export const useFirestore = (collections) => {

    const addDocumentUser = async (doc, id) => {
                                 // 👆
        try{
            const addedDocument = await setDoc(doc(db, collections, id), {...doc});
            ...

我指出的第二个doc隐藏了您之前导入的功能。

解决方案是使用不同的名称:

import { db } from "../firebase/config";
import {collection, addDoc, deleteDoc, updateDoc, doc, setDoc} from 'firebase/firestore'
 
export const useFirestore = (collections) => {

    const addDocumentUser = async (data, id) => {
                                 // 👆
        try{
            const addedDocument = await setDoc(doc(db, collections, id), {...data});
                                                                           // 👆
            ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM