【问题标题】:Cannot see firebase data in application - react native在应用程序中看不到 Firebase 数据 - 反应原生
【发布时间】:2018-03-28 00:33:11
【问题描述】:

我已经设置了一个调用,以使用 react native 从我的 firebase 数据库中获取数据。

数据库结构

FirebaseList.js中的代码

constructor(props) {
  super(props);
  this.state = {
    data: []
 };
}

componentWillMount() {
  firebase.database().ref('/signposts/items').on('value', snapshot => {
    const dataArray = [];
    const result = snapshot.val();
    for (const data in result) {
      dataArray.push(data);
    }
    this.setState({ data: dataArray });
    console.log(this.state.data);
  });
}

render() {
  return (
    <FlatList
      data={this.state.data}
      renderItem={({ item }) => (
        <Text>{item}</Text>
      )}
      keyExtractor={item => item}
    />
  );
}

我相信与 firebase 的连接是成功的,因为我可以构建和运行应用程序。但是,当组件呈现时,我没有看到我的两行数据“row1”和“row2”。

【问题讨论】:

  • 您是否尝试在 componentDidMount() 中控制台记录 dataArray?然后在 render() 中使用 console.log?
  • @Rahamin 我在控制台中看不到任何东西
  • 然后尝试检查您的连接...请参阅答案中的示例代码...
  • 你承诺的事情是在你的数据被渲染后返回&什么是cloneWithRows??
  • @RaajNadar 不确定cloneWithRows 是什么,我用了一个教程firebase.googleblog.com/2016/01/…

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


【解决方案1】:

你说你的代码是正确的,那么还要检查这个规则是否已经设置

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}

注意: - 当您使用上述规则时,您的数据库对所有Read more here 都是开放的。让您在推送到生产环境后使用更新规则。

【讨论】:

  • { "rules": { ".read": true, ".write": false } } 把我的规则改成了这个,还是什么都没有:(
  • 等待几分钟,然后再尝试.. 如果您只是更改了设置
  • 这成功了,非常感谢...如果我记录 this.state,我现在可以在控制台中看到我的数据...现在尝试找出它为什么不渲染
【解决方案2】:

如果console.log(dataArray) 显示一个空数组(假设console.log() 有效...),请尝试检查您的连接:

componentDidMount() {
  const ref = firebase.database().ref('/signposts');
  const checkConnection = firebase.database().ref(`.info/connected`);
  checkConnection.on('value', function(snapshot) {
    if (snapshot.val() === true) {  /* we're connected! */
      firebase.database().ref('/signposts').on('value', snapshot => {
        const dataArray = [];
        const result = snapshot.val();
        for (const data in result) {
          dataArray.push(data);
        }
        if (dataArray.length === 0)
          console.log("No data.")
        else
          this.setState({ listViewData: dataArray });
      });
    } else {  /* we're disconnected! */
      console.error("Check your internet connection.")
    }
  }
}

【讨论】:

  • 我不确定我是否理解如何将其包含到我的代码中
  • 谢谢,我收到了一个意外的令牌错误,看不到来自哪里
猜你喜欢
  • 2017-10-26
  • 2021-05-28
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 2020-02-13
  • 1970-01-01
相关资源
最近更新 更多