【问题标题】:Printing data with specific key from Firebase使用 Firebase 中的特定键打印数据
【发布时间】:2019-06-02 11:06:29
【问题描述】:

在我的 React Native 应用程序中,我试图从我的 Firebase 数据库中打印具有特定键(从另一个组件传递)的数据。我使用了类似的代码来获取所有数据库数据,但我得到了空白。

var data = []
var currentUser;

class FavPlant extends React.Component {

constructor(props){
    super(props)

     this.ds = new ListView.DataSource({rowHasChanged:(r1,r2) => r1 !==r2})

     this.state = {
         listViewData : data
     }
 }

 componentDidMount(){

  const { navigation } = this.props;
  const keyPlant = navigation.getParam('keyPlant');

  firebase.auth().onAuthStateChanged((user) => {

    if (user != null) {
      var that = this

    firebase.database().ref(user.uid).child('plantList').equalTo('keyPlant').on('child_added',function(data){

        var newData = [...that.state.listViewData]
        newData.push(data)

        that.setState({ listViewData: newData})

    });
  }
})
 }

render(){ return(
<Container>
      <Content>
         <ListView
            enableEmptySections
            dataSource = {this.ds.cloneWithRows(this.state.listViewData)}
            renderRow={data =>
                <Text>{data.val().bloom}</Text>
            }/>
            </Content>
        </Container>
 )}

【问题讨论】:

  • 您的.equalTo('keyPlant') 是一个常量字符串,而不是您的实际变量。你应该把它改成.equalTo(keyPlant)
  • 我已经从 .equalTo('keyPlant') 中删除了撇号,但我仍然没有得到任何结果。当我从 navigation.getParam('keyPlant'); 中删除撇号时;我也没有得到任何结果和黄色警告:“Posiible Unhandled Promise Rejection (id:0) Error: Query.equalTo failed: First argument contains undefined property '0kN4FpYslQQfvxJ8ZdWfRCsOZ6P2.plantList'

标签: javascript firebase react-native firebase-realtime-database


【解决方案1】:

如果您的 JSON 中有 DatabaseReferenceplantList 元素:

var plantListRef = ...

然后你可以通过以下方式获取具有特定键的子节点:

plantListRef.child("-Lg-l2GOOVC_Hni5a3ng").on('value',function(snapshot){
  console.log(snapshot.key); // prints "-Lg-l2GOOVC_Hni5a3ng"
  console.log(snapshot.val());
});

【讨论】:

  • 我已将代码更改为:firebase.database().ref(user.uid).child(keyPlant).on('value', function(snapshot){ console.log(snapshot. val()); });但我在控制台中得到“null”。
  • 你不是在路径中缺少plantList 吗? firebase.database().ref(user.uid).child('plantList').child(keyPlant)?请注意,我看不到您的确切数据结构,所以现在我在猜测。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
相关资源
最近更新 更多