1 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個贊
當(dāng)您在 Firebase 中監(jiān)聽某個值時,每次調(diào)用回調(diào)時,它都會獲取該位置所有數(shù)據(jù)的完整快照。因此,預(yù)計(jì)第二次您會收到新消息 ** 以及已經(jīng)存在的所有消息。
因此,您需要忽略comments狀態(tài)中的當(dāng)前值,并始終僅使用數(shù)據(jù)庫中的信息來填充它:
function retrieveComments(){
if(props.location.project){
var comments = firebase.database().ref('/projects/'+props.location.project.uid + '/' + props.location.project.pid+'/comments');
comments.once('value', (snapshot)=>{
let msgs = [];
snapshot.forEach((snap)=>{
msgs.push(snap.val());
})
setComments(comments => msgs);
})
}
}
順便說一句:我建議使用on()(而不是once()),因?yàn)檫@意味著 Firebase 將繼續(xù)偵聽數(shù)據(jù)庫的更改,并在有人發(fā)布或編輯評論時自動更新評論。
添加回答
舉報(bào)