0
Iは、ユーザ/(ユーザID)/(トピック)の値を照会することはnullを返す以下のデータを有する:ここFirebaseデータのスナップショットキーが、無.val(返し)
{
"topic" : {
"cafe" : {
"-KWoHbBXzWlD8aHBjg6Z" : {
"count" : 0,
"id" : "00qMXXXeYkbCbmjajoe4XZeIPuo1",
"text" : "A new message",
"time" : "2016-11-17T21:56:26.036Z"
},
"-KWpBzT83S_RB3wVwZ2u" : {
"count" : 3,
"id" : "zTSpSTqyRcaJf0MlYl15gBnvYdj2",
"text" : "Hello",
"time" : "2016-11-18T02:11:29.818Z"
}
},
"pomodoro" : {
"-KWoJhC9V1mLznt7jGwF" : {
"count" : 3,
"id" : "00qMXXXeYkbCbmjajoe4XZeIPuo1",
"text" : "Tomato! #tomato",
"time" : "2016-11-17T22:05:34.933Z"
}
}
},
"user" : {
"00qMXXXeYkbCbmjajoe4XZeIPuo1" : {
"pomodoro" : "2016-11-18T14:20:32.800Z"
},
"zTSpSTqyRcaJf0MlYl15gBnvYdj2" : {
"cafe" : "2016-11-18T14:24:32.968Z"
}
}
}
は、関連するコードです。
// inside the constructor
this.database = firebase.database().ref()
//relevant function
databaseListenerOn =() => {
// does not work correctly
let userPath = `user/${this.props.userID}/${this.state.topic}`
this.database.child(userPath).on('value', data => {
this.setState({time: data.val()})
console.log(data.key)
console.log(data.val())
})
//works correctly
let messagePath = `topic/${this.state.topic}`
this.database.child(messagePath).on('value', data => {
let messages = []
data.forEach(message => {
messages.push({
count: message.val().count,
id: message.val().id,
key: message.key,
text: message.val().text,
time: message.val().time
})
})
this.setState({messages: this.state.messages.cloneWithRows(messages)})
})
}
ログdata.key
は正しく 'カフェ' や 'ポモドーロ' を返します。ただし、data.val()
はnullを返し、文字列のタイムスタンプにアクセスできません。
同様のコードを使用すると、他のデータに正常にアクセスできます。data.val()
がオブジェクトを返すため、私は何が間違っているのか混乱しています。私はこのサイトとGoogleグループで同様の問題を検討しましたが、私の状況に対する答えは見つかりませんでした。
あなたの質問にJSONツリーの画像が含まれています。 Firebaseデータベースコンソールの[エクスポート]ボタンをクリックすると、実際のJSONをテキストとして置き換えてください。 JSONをテキストとして検索可能にすることで、実際のデータを使ってテストしたり、答えに使用したりすることができます。一般的には、これは良いことです。 –
コードは一目瞭然です。問題を再現する最小のJSBinを設定できますか? –
以前はJSBinを使ったことはありませんが、問題を再現できるかどうかはわかります。今のところJSONをテキストと追加情報を追加しました。 – Akira