将Firebase 3中的数据读入具有ES6语法

时间:2016-08-10 15:21:16

标签: reactjs firebase-realtime-database

我一直在努力解决一个简单的用例:在Firebase数据库的React网络应用上读取一个数字,即已注册的用户数,并在加载页面时显示。

有旧版本的React和Firebase的文档,但似乎这个用例应该是新的方式。

Screenshot of my Firebase Database.

import React from 'react'
import {Badge} from 'react-bootstrap'
var firebase = require('firebase')
var config = {
  apiKey: "MyKey", // redacted key
  authDomain: "dnavid-c48b6.firebaseapp.com",
  databaseURL: "https://dnavid-c48b6.firebaseio.com",
  storageBucket: "dnavid-c48b6.appspot.com",
};
var firebaseApp = firebase.initializeApp(config);
var UCRef = firebaseApp.database().ref("numberofusers")
class UserCount extends React.Component{
  constructor(props){
    super(props)
    this.state = {usercount: '3'}
  }
  componentDidMount() {
    // this.setState({usercount:4}) // This actually works and displays "4"
    var uc = UCRef.on('value',function(snapshot){return(snapshot.val())})
    debugger;
    this.setState({usercount:uc}) // This does not work
  }
  render(){
    return (
      <Badge>
        {this.state.usercount}
      </Badge>
    )
  }
}
export default UserCount;                                                                              

在Chrome调试器中(注意“调试器”命令)我进入控制台:

> uc <. function(snapshot) { return snapshot.val(); }

> uc() Uncaught TypeError: Cannot read property 'val' of undefined(…)

我将从中推断出由于未定义快照,因此尚未触发事件。但这听起来不合逻辑:

  1. componentDidMount已经过评估(因为组件已经渲染,并且当调试器停止检查时执行到达它)
  2. Firebase文档声称事件已触发,请参阅下面的“此方法在连接侦听器时触发”。
  3.   

    价值事件   您可以使用value事件来读取内容的静态快照   在特定路径上,因为它们在事件发生时存在。这种方法   每次连接监听器时都会触发一次   包括儿童在内的数据发生了变化。事件回调传递了一个   包含该位置所有数据的快照,包括子数据。   如果没有数据,则返回的快照为空。

    那么,听众是不是被附加了?发生了什么事?

1 个答案:

答案 0 :(得分:6)

你需要这样做:

Select *,RowNr=Concat('ICD',Row_Number() over (Partition By ClaimID Order By ClaimID)) from YourTable

CLAIMID CODENUMBER RowNr 2 465.90 ICD1 2 238.80 ICD2 2 461.90 ICD3 2 786.20 ICD4 不会为您返回值。你可以在回调中获取它