开发者问题收集

我无法在 Firebase 中创建订单

2022-08-21
44

我正在使用 ReactJS 创建一个应用。这是一款电子商务应用。将一些产品添加到购物车后,我必须填写表格才能完成订单。这应该会将信息发送到 Firebase 并创建一个新的集合,但我收到了错误

Uncaught FirebaseError: Function addDoc() called with invalid data. Unsupported field value: a function (found in field total in document ventas/GPFfrRZ6mOd7fEZA9Y1a)

这是我在购物车中的代码:

import React, { useContext, useState, useEffect } from 'react';
import { CartContext } from '../../Context/CartContext';
import { doc, addDoc, collection, updateDoc, getFirestore } from 'firebase/firestore';
import Swal from 'sweetalert2';
import Form from '../Form';



const Cart = () => {
  const { cart, removeItem, emptyCart, totalCompra } = useContext(CartContext);
  
  const [idVenta, setIdVenta] = useState("");
  
  const finalizarCompra = () => {
    
    const db = getFirestore()
    
    const ventasCollection = collection(db, "ventas");
    addDoc(ventasCollection, {
      items: cart,
      total: totalCompra,
    }).then((result) => {setIdVenta(result.id)});

    cart.forEach((item) => {
      const updateCollection = doc(db, 'items', item.id)
      updateDoc(updateCollection,{
          stock: item.stock - item.quantity,
        })
    });
    
    emptyCart();
  }

  useEffect(() => {
    if (idVenta.length > 0) {
        Swal.fire({
            position: 'top-end',
            icon: 'success',
            title: 'Se ha registrado la compra en el sistema con el siguiente id: '+ idVenta,
            showConfirmButton: false,
            timer: 2000
        });
    }
})

  return (
    <>
      <div>Cart</div>
      {cart.map((product, key) => (
        <div key={key}>
          <div>{product.titulo}</div>
          <p>Precio por unidad: ${product.precio}</p>
          <p>Cantidad: {product.qty}</p>
          <button onClick={ () => {removeItem(product.id)}}>ELIMINAR</button>
        </div>
      ))}
      <button onClick={emptyCart}>VACIAR CARRITO</button>
      <p>PRECIO FINAL: ${totalCompra()}</p>
      <div>
        <Form fCompra={finalizarCompra} />
      </div>
    </>
  );
};
export default Cart;
2个回答

carttotalCompra 都是函数。

由于您是从上下文中获取它,并且它未在任何地方记录,因此很难说出是其中哪一个或者可能是这两个。

尝试记录这两个变量并确保仅传递了正确的值。

此外,请确保未传递 undefined ,因为它在 addDoc 中也是不允许的。

Shameel Uddin
2022-08-21

错误消息告诉您,您尝试使用 addDoc 添加到文档的字段之一实际上是函数,这是无效的。我猜 totalCompra 是一个函数。您需要做的是传递一个有效值,例如字符串、数字、布尔值、对象、数组或 null。如果您传递一个函数,Firestore 将不会为您调用该函数。

Doug Stevenson
2022-08-21