検索フォームのボタンをクリックすると呼び出される関数があります。文字列を取得して文字のみであることを確認します。次に、選手名が既にデータベースに入っているかどうかを確認し、そうでない場合は追加します。彼がデータベースにいる場合は、ステートメントのelse部分に行きます。これはうまくいきますが、他の分野では、データベースにまったく同じ名前のプレーヤーが存在することがわかっている時点で、そのプレイヤーのデータベースの特性の1つを操作したい。具体的には、プレーヤーの投票数に1を加えます。スナップショットの後にFirebase要素を操作する
writePlayer(newPlayerContent){
if (/^[a-zA-Z\s]*$/.test(this.state.newPlayerContent)) {
this.checkIfUserExists(this.state.newPlayerContent);
if(this.state.duplicate !== true){
this.props.addPlayer(this.state.newPlayerContent);
this.setState({
newPlayerContent: '',
})
}
else{
var playersRef = firebase.database().ref();
playersRef.child('players').orderByChild("playerContent").equalTo(this.state.newPlayerContent).once("value",snapshot => {
const userData = snapshot.val();
console.log(userData)
})
}
}
else {
console.log("Non-letter character found in: " + this.state.newPlayerContent)
}
}
私はにconsole.log(のuserData)は私が操作したい特定のプレーヤーのための関連情報を取得していますことを行うと - など
-KytHrvt8R1DkY0E4Fho:{のPlayerContent: "テスト"、ランク:0、投票:0}
私はuserDataのプレーヤーでvotes ++を実行します。フィールドのデータを変更するために私のelseステートメントに何を追加するのか分かりません。
マイFirebaseがそうのようにレイアウトされています
players
playerContent: "Test"
rank: 0
votes: 0
これは私が必要なものです。ありがとうございます。しかし、私が検索機能を使って投票すると、データベースのユーザー情報がキーと投票数に変わり、名前(playerContent)とランクが消去されます。基本的に投票数だけの鍵の内容を上書きする – idlehand
'playerContent:data.playerContent'も追加しました。名前を戻します。これが最善の方法かどうかはわかりませんが、現時点では問題ありません。 – idlehand
'set'の代わりに' update'を使うことができます。 – Hareesh