Tengo una base de datos de firestore con 2 colecciones: usuarios y productos. Los usuarios tienen un campo de 'carrito' (tipo: matriz) que almacena el nombre único (campo en productos) de los productos agregados al carrito por un usuario. Obtuve la matriz 'carrito' y ahora, para cada artículo, quiero obtener el documento del producto para poder acceder a los campos individuales de cada producto. *currentUserCart almacena los elementos de la matriz del carrito: cadenas con el nombre único del producto en función del cual realizo la consulta en fetchProducts().
Si bien fetchUserCart() funciona, seguí la misma lógica para fetchProducts() pero no funciona.
Intenté esto, pero obtengo los productos correctos solo si vuelvo a hacer clic en cualquier parte de la pantalla modal
export const Navbarr = ({items}) => { const [user, error] = useAuthState(auth); const [cartItems, setCartItems]=React.useState(0); const [open, setOpen] = React.useState(false); const [currentUserCart, setCurrentUserCart]=React.useState([]); const [currentProducts, setCurrentProducts]=React.useState([]); const handleOpen = () => { fetchUserCart(); setOpen(true); fetchProducts(); }; const fetchProducts=async()=>{ const products=[]; currentUserCart.forEach(async(item)=>{ const q = query(collection(db, "products"), where("uniqueName", "==", item)); const doc = await getDocs(q); const data = doc.docs[0].data(); setCurrentProducts(currentProducts=>[...currentProducts, data]); }) console.log(currentProducts); } const fetchUserCart = async() =>{ const q = query(collection(db, "users"), where("uid", "==", user?.uid)); const doc = await getDocs(q); const data = doc.docs[0].data(); setCurrentUserCart(data.cart); console.log('cart '+currentUserCart); } const handleClose = () => setOpen(false); const fetchUserCartItems=async()=>{ const q = query(collection(db, "users"), where("uid", "==", user?.uid)); const doc = await getDocs(q); const data = doc.docs[0].data(); let cartItemsClone=data.cartItems; setCartItems(cartItemsClone); } React.useEffect(() => { fetchUserCartItems(); fetchUserCart(); fetchProducts(); }, [user], [currentUserCart], [currentProducts]);