簡體   English   中英

擴展運算符僅添加 for 循環中的最后一個值

[英]Spread operator is only adding the last value in a for loop

我正在嘗試顯示 firebase 集合中每個文檔中出生的值的所有值。 我的代碼如下。

  const [bdays, setBdays] = useState([]);

  const refresh = () => {
    db.collection("posts")
      .orderBy("born")
      .onSnapshot((ss) => {
        ss.forEach((doc) => {
          setBdays([...bdays, doc.data().born]);
        });
      });
    console.log(bdays);
  };

console.log(bdays)的結果是[2005,2005,2005,2005]但應該是[1998, 1999, 2001, 2005]有人知道為什么會這樣嗎?

正如其中一條評論所指出的,設置 state 是一個異步過程。 您可以通過使用像這樣的局部變量來完成您想要的:

  const [bdays, setBdays] = useState([]);

  const refresh = () => {
    const updatedBdays = bdays;
    db.collection("posts")
      .orderBy("born")
      .onSnapshot((ss) => {
        ss.forEach((doc) => {
          updatedBdays.push(doc.data().born);
        });
      });
    setBdays(updatedBdays);
    console.log(bdays);
  };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM