简体   繁体   English

如何从 Firestore 和 map 接收数据到一个元素?

[英]How to receive data from Firestore and map it to an element?

I created an e-commerce website.我创建了一个电子商务网站。 I can push data into firestore but now I want to create an order history page and map the received data into a "Product" element.我可以将数据推送到 firestore,但现在我想创建一个订单历史页面,并将接收到的数据 map 放入“产品”元素中。

I am able to reveice data into console but cannot map it.我能够将数据重新发送到控制台,但不能 map 。

const [{basket, user }, dispatch] = useStateValue();
    const [order, setOrder] = useState([]);

    useEffect(()=>{
      if (user){
        const orderData = onSnapshot(doc(db, "orders", user?.email), (doc) => {
        console.log("Current data: ", doc.data().order);
    });
      }else{
        setOrder([])
      }
    }, [user])

Mapping -映射 -

<div className='orderPageProduct'>
  {order?.map(order => (
    <OrderProduct order={order} />
  ))}
</div>

接收数据的控制台

I am just a beginer and don't know how to proceed.我只是一个初学者,不知道如何进行。

It looks like you forgot to call setOrders in the onSnapshot handler, which means your state is never updated and your UI is thus never re-rendered with the orders fro the database.看起来您忘记了在onSnapshot处理程序中调用setOrders ,这意味着您的 state 永远不会更新,因此您的 UI 永远不会使用来自数据库的订单重新呈现。

To address that specific problem:要解决该特定问题:

useEffect(() => {
  if (user) {
    onSnapshot(doc(db, "orders", user?.email), (doc) => {
      const orderData = doc.data().order; // 👈
      setOrder([orderData]); // 👈
    });
  } else {
    setOrder([])
  }
}, [user])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM