2016-10-11 6 views
1

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を使用したいですしかし、問題が呼び出されたときにデータが返されると、これはグローバルオブジェクトを指しています。firebase.databaseがグローバルレベルで開始されていると仮定しますが、setStateをローカルコンポーネントレベルで、新しいレンダリングがトリガされるようにしますか?

答えて

1

私は矢印機能があなたのために右の「この」を取得

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

このアプローチを好みます。

また、古典的な「自己」変数または「その」変数も機能するはずです。

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

btwのthis.setStateは関数であり、再描画をトリガーします。

+0

答えをありがとう! – Mads

+0

申し訳ありませんが、投稿しました。 – Mads

+0

そしてもう一度。私はそれをすべて1行で行う必要があると思います。自己を試してみましたが、変数が不明で失敗しました。それから私は矢印の構文を試して、それは動作します。レンダリングを自動トリガしないという事実を除いて、私はthis.state = {isLoading:false}を実行した後でthis.forceUpdateを使用しても動作させることができます。 – Mads

関連する問題