![](/img/trans.png)
[英]Why spread operator is showing only the last entered data in a for loop?
[英]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.