# #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 вы можете принять этот ответ, нажав на галочку, если это вам поможет 😀