我无法在 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个回答
cart
或
totalCompra
都是函数。
由于您是从上下文中获取它,并且它未在任何地方记录,因此很难说出是其中哪一个或者可能是这两个。
尝试记录这两个变量并确保仅传递了正确的值。
此外,请确保未传递
undefined
,因为它在
addDoc
中也是不允许的。
Shameel Uddin
2022-08-21
错误消息告诉您,您尝试使用
addDoc
添加到文档的字段之一实际上是函数,这是无效的。我猜
totalCompra
是一个函数。您需要做的是传递一个有效值,例如字符串、数字、布尔值、对象、数组或 null。如果您传递一个函数,Firestore 将不会为您调用该函数。
Doug Stevenson
2022-08-21