Ошибка типа: _firebase__WEBPACK_ИМПОРТИРОВАННЫЙ_МОДУЛЬ_2__.db.коллекция не является функцией

# #javascript #reactjs #firebase #google-cloud-firestore

Вопрос:

Я видел, что этот вопрос был опубликован 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:

Вы экспортируете не 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 не является функцией..

2. @ChrisPesar попробуйте один раз перезагрузить сервер веб-приложений. Убедитесь, что вы сохранили файлы.

3. То же самое.. Форма загружается, но когда я нажимаю, чтобы отправить данные, я получаю сообщение об ошибке

4. Мне жаль.. То, что у меня есть, — это последний код, я просто пропустил то, что в возврате( )

5. @ChrisPesar вы можете принять этот ответ, нажав на галочку, если это вам поможет 😀