TypeError:_firebase__WEBPACK_IMPORTED_MODULE_1__.default.collection不是函数

guz6ccqo  于 2023-10-22  发布在  Webpack
关注(0)|答案(1)|浏览(175)

这是我第一次在StackOverflow上提问。我是JS和Firebase的新手,我目前正在学习React课程,其中有一部分我必须将Firebase实现到我的“To-do App”中。但我得到了这个错误:

ERROR
_firebase__WEBPACK_IMPORTED_MODULE_1__.default.collection is not a function
TypeError: _firebase__WEBPACK_IMPORTED_MODULE_1__.default.collection is not a function
    at Add (http://localhost:3000/static/js/bundle.js:51:55)
    ...

这是我的firebase.js:

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

const firebaseConfig = {
  ...
};

const app = initializeApp(firebaseConfig);
const db = getFirestore(app);

export default db;

db的最初使用是在我的App.js中的Add函数中,我试图在其中向Firestore添加to-dos。

import React, { useState } from 'react';
import db from './firebase';
import { FieldValue } from 'firebase/firestore'; // Importa FieldValue desde 'firebase/firestore', no es necesario importar 'firebase/app'
import './App.css';
import Button from '@mui/material/Button';
import TextField from '@mui/material/TextField';
import Paper from '@mui/material/Paper';
import AddBoxOutlinedIcon from '@mui/icons-material/AddBoxOutlined';
import UpdateIcon from '@mui/icons-material/Update';
import DeleteOutlineOutlinedIcon from '@mui/icons-material/DeleteOutlineOutlined';

function App() {

  const [todos, setTodos] = useState([])
  const [text, setText] = useState('')
  var today = new Date()
  var dateTime = today.getDate() + '-' + (today.getMonth() + 1) + '-' + today.getFullYear() + '    ' + today.getHours() + ':' + today.getMinutes() + ':' + today.getSeconds()

  const Add = (e) => {
    e.preventDefault()
    db.collection('TodoApp').add({
      TODO: text,
      TIME: dateTime,
      SERVERTIMESTAMP: FieldValue.serverTimestamp()
    })
      .then(() => {
        setText('')
        alert('Todo added successfully')
      })
      .catch((error) => {
        alert('Error adding todo', error)
      })
  }

我试图寻找类似的错误,但我还没有找到解决方案。
如果需要,我可以发布更多代码。任何帮助将不胜感激。

rkue9o1l

rkue9o1l1#

Firebase SDK的API在几年前进行了更新,并更改了大多数SDK的语法。请通读modular SDK upgrade guide,了解如何将遗留代码迁移到新方法的详细信息。
在本例中,dbFirestore类的一个示例。从链接的API引用中可以看到,该类上没有collection()方法。这是因为在SDK switched to a modular syntax中,您为每个功能调用函数,传入对象作为第一个参数,然后是任何其他参数。
您当前的代码:

import db from './firebase';

// ...

db.collection('TodoApp').add({
  TODO: text,
  TIME: dateTime,
  SERVERTIMESTAMP: FieldValue.serverTimestamp()
})
  .then(() => { /* ... */})
  .catch((err) => { /* ... */})

应重写为

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

// ...

const todoColRef = collection(db, 'TodoApp'); // collection used here

addDoc(todoColRef, { // addDoc used here
  TODO: text,
  TIME: dateTime,
  SERVERTIMESTAMP: serverTimestamp() // serverTimestamp used here
})
  .then(() => { /* ... */})
  .catch((err) => { /* ... */})

相关问题