TypeError: _firebase__WEBPACK_IMPORTED_MODULE_2__.db.collection 不是一个函数。

3

我看到这个问题是2天前发布的。 我尝试了解决其他人的方法,但似乎仍然无法弄清楚哪里出了问题。 我正在尝试使用React制作联系页面。 提前感谢!

import React, { useState } from 'react';
import '../App.css';
import { db } from '../firebase';


const Contact = () => {

  const [name, setName] = useState('');
  const [email, setEmail] = useState('');
  const [message, setMessage] = useState('');

  const handleSubmit = (e) => {
    e.preventDefault();

    db.collection('contacts')
    .add({
      name:name,
      email:email,
      message:message,
    })
    .then(() => {
      alert('Message submitted ' );
    })
    .catch((error) => {
      alert(error.message);
    });

    setName('');
    setEmail('');
    setMessage('');
  };


  return (



  )
}

export default Contact

firebase.js 文件:

import { initializeApp } from "firebase/app";
import { getFirestore } from 'firebase/firestore'

const firebaseConfig = {
  apiKey: "",
  authDomain: "",
  projectId: "",
  storageBucket: "",
  messagingSenderId: "",
  appId: ""
};


const app = initializeApp(firebaseConfig);
const db = getFirestore(app)
export { db } 
1个回答

2
您没有将Firestore作为db导出,而是整个Firebase应用程序实例。尝试重构代码,将Firestore实例作为db导出:
import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";

const app = initializeApp(firebaseConfig);
const db = getFirestore(app)
export { db } 

同时,您正在使用全新的模块化 SDK (v9),其语法完全不同。我建议您遵循文档以了解它。您的查询应该是:

import { collection, addDoc } from "firebase/firestore"; 
import {db} from "../firebase"

  const handleSubmit = (e) => {
    e.preventDefault();

    addDoc(collection(db, "contacts"), {
      name:name,
      email:email,
      message:message,
    })
    .then(() => {
      alert('Message submitted ' );
    })
    .catch((error) => {
      alert(error.message);
    });

    setName('');
    setEmail('');
    setMessage('');
  };

1
它一直给我同样的错误,并引用我的Contact.js文件,说db.collection不是一个函数。 - Tyler
@ChrisPesar 请尝试重新启动您的Web应用程序服务器。确保您已保存文件。 - Dharmaraj
同样的事情。。表单加载了,但当我点击提交数据时,出现了错误。 - Tyler
对不起,我手头的是最新的代码,只是在 return() 中省略了一些内容。 - Tyler
1
@ChrisPesar 如果这个答案对你有帮助,可以通过点击复选框来接受它 :D - I_love_vegetables
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接