2017-06-20 21 views
0
import React from 'react'; 
import {View} from 'react-native'; 
import Button from 'react-native-button'; 

const gData = [{counter: 0}]; 

export default class App extends React.Component { 

    constructor(props) 
    { 
    super(props); 
    this.state = {data: {}}; 
    console.log("Constructor: ", this.state.data); 
    } 
    _handlePress() 
    { 
    console.log("Pressed Button") 
    gData[0].counter += 1; 
    console.log("Before setState: ", gData); 
    this.setState({data: gData}, console.log("After setState: ", this.state.data)); 
    } 

    render() { 
    return (
     <View style={{flex:1, justifyContent: 'center',}}> 
     <Button 
      onPress={() => this._handlePress()}> 
      Press Me! 
     </Button> 
     </View> 
    ); 
    } 
} 

こんにちは、 状態を更新していない私は、プレス時に、それはオブジェクト内のカウンタを更新し、オブジェクトを保存する必要があることを、画面上のボタンを作成し、反応し、ネイティブアプリケーションのための、この単純なコードを持っています状態にあります。私はアプリを実行し、ボタンを押すと、しかし、私は私のログにこれを取得する:リアクト - ネイティブSETSTATEが非同期

11時19分43秒PM:実行x86_64版

11時19分43秒PMのために作成したAndroid SDKのアプリ:コンストラクタ:{ }

11時23分20秒PM:押されたボタン

11時23分20秒PM:SETSTATE前:[{ "カウンター":1}]

11時23分20秒PM:SETSTATE後:{}

だから何らかの理由で状態が更新されない。誰がそれが事実であるかを知っていますか?

あなたはそれではなく、状態を更新して行われた後ですぐに呼び出されることのようにconsole.log呼び出す場合、匿名関数にそれを入れてみてくださいかなり確信して

答えて

0

this.setState({data: gData},() => console.log("After setState: ", this.state.data)); 
+0

あなたは正しいです!ありがとう!彼らは、更新が完了すると、第2引数がコールバックであると常に言います。したがって、ラップするために無名関数が必要であることは間違いありません。少なくとも自分のような初心者なら... – palmp

関連する問題