Firebase 如何找到本地的而不是全局的?

Firebase 如何找到本地的而不是全局的?,firebase,react-native,firebase-realtime-database,Firebase,React Native,Firebase Realtime Database,我对React Native和这类应用的整个流程非常陌生,如果这是一件显而易见的事情,那么很抱歉。:-) 好的,我创建了一个组件,其中包含以下代码: constructor(props) { super(props); this.state = {isLoading: true}; //this = object } componentWillMount() { var currentBusiness = firebase.database().ref("business/" +

我对React Native和这类应用的整个流程非常陌生,如果这是一件显而易见的事情,那么很抱歉。:-)

好的,我创建了一个组件,其中包含以下代码:

constructor(props) {
  super(props);
  this.state = {isLoading: true}; //this = object
}

componentWillMount() {
  var currentBusiness = firebase.database().ref("business/" + this.props.business)
  currentBusiness.on('value', function(snapshot) {
    currentBusinessData = snapshot.val()
    this.setState = ({isLoading: false}) //this = globalobject
  });
}
在我的渲染函数中,我想使用
this.state.isLoading
在加载数据时触发一个新视图,但是,问题在于调用的函数中,当返回数据时,它引用一个globalobject,我假设这是因为
firebase.database
是在全局级别启动的,但是如何在本地组件级别调用
setState
,从而触发新的渲染呢?

我更喜欢这种方法

currentBusiness.on('value', (snapshot) => {
    currentBusinessData = snapshot.val()
    this.setState({isLoading: false}) 
});
arrow函数为您获取正确的“this”

或者,经典的“self”或“that”变量也应该起作用

const self = this
currentBusiness.on('value', function(snapshot) {
    currentBusinessData = snapshot.val()
    self.setState({isLoading: false}) 
});

顺便说一句,this.setState是一个函数,它将触发重新渲染。

谢谢您的回答!抱歉,它已在enter上发布。请重试。我想我必须在一条线上完成这一切。尝试了self,但由于变量未知而失败。然后我尝试了arrow语法,它很有效。除了它不会自动触发渲染,但是如果我这样做的话,我可以让它工作。state={isLoading:false},然后使用this.forceUpdate。好的,让self工作,因为它不会返回错误,但是渲染仍然不会自动触发。啊,我在this.setState中有一个=。我想我应该把你的答案复制粘贴在纸上,而不是自己打印出来,这样我第一次就可以像个魔术师一样工作了——谢谢:-)