我有一个小型数据库,您可以输入体育运动员的名字,然后点击其名称旁边的图标进行投票或者投票。我试图让页面检测到投票已经发生(这看起来有效),然后根据大多数投票重新排序列到最少投票。
我的Firebase看起来如此:
players
id (lots of letters/generated by firebase?)
playerContent: "firstname lastname"
votes: 1
id
playerContent: "differentfirstname differentlastname"
votes: 2
id
playerContent: "thirdname thirdlast"
votes: 3
以下是我最初引用我的数据库的方式:
this.database = this.app.database().ref().child('players');
以下是我一直在使用的大部分代码:
1.)
this.database.on('child_added', snap => {
previousPlayers.push({
id: snap.key,
playerContent: snap.val().playerContent,
votes: snap.val().votes,
})
2.)
this.database.on("child_changed", function(snapshot) {
var changedVote = snapshot.val();
console.log("new value: " + changedVote.votes)
});
3.)
var votesRef = firebase.database().ref("votes");
votesRef.orderByValue().on("child_changed", function(snapshot){
snapshot.forEach(function(data) {
console.log("The " + data.key + " votes are " + data.val());
});
});
this.setState({
players: previousPlayers
})
})
}
在#2那里,我在浏览器检查窗口中得到即时反馈,说明向上或向下注册正在为每个玩家注册 - 但是我认为#3中有问题。它似乎没有改变我在屏幕上看到的顺序,即使我刷新页面。它始终按照最旧的顺序显示内容,最新的显示在底部。
提前致谢