2016-06-01 3 views
0

私の計画は、ヘッダーに認証トークンを含むhttp要求から文字列の配列を取得し、次に配列を使用して、 (反応するネイティブ・ルータ・フラックスが第二ではAsyncronous setStateはcomponentDidMountでは動作しませんが、別の場所で作業しています:ネイティブに反応します

AsyncStorage.setItem('access_token',token).then((value)=> { Actions.pageTwo()}).done() 
//navigates to second page 

)ナビゲーションのために使用されます。ユーザーは、それゆえ彼は私が認証トークンを保存する方法リストビューなど)

に送ることでしょ管理者であることを意味しますページがある

var HotelAdminService = require('./services.js'); 
.... 
constructor(props) { 
    super(props); 
    this.state={ 
    keyLoaded:false, 
    }; 
    this.tester= HotelAdminService.tester.bind(this); 
} 

componentDidMount() { 
    HotelAdminService.tester.bind(this); 
} 

render() { 
    console.log(this.state); 
    if (!(this.state.keyLoaded)) { 
     return this.renderLoadingView(); 
    } 
    return (
     <View style={styles.viewContainer} > 
     <SearchBar onChangeText={(e) => this.clickMovie(e)}> </SearchBar> 
     <ListView dataSource={this.state.dataSource} renderRow= {this.renderMovie} style={styles.listView}/> 
     </View> 
    ); 
} 

services.js:

exports.tester=function(){ 
let REQUEST_URL= config.baseUrl + 'api/HotelAdmin/GetKey'; 


AsyncStorage.getItem('access_token').then((value) => { 

fetch(REQUEST_URL, { 
method: 'GET', 
headers: { 
    'Authorization': 'Bearer ' + value, 
} 
}).then((response) => {return response.json()} ).then((responseData) => { 

this.setState(
    {key: responseData, 
    keyLoaded: true, 
    dataSource: this.state.dataSource.cloneWithRows(responseData), 
    }); 
    }).done(); 



}); 



} 

今、私はそれが私はそれが何をしたいのかないように、この方法は、しかし、私は2ページ目からボタンのクリックから呼び出した場合にのみ、動作します知っています。私がしたいのは、開始時にHotelAdmin.testerの作業を取得することです。データを取得したときに再レンダリングが発生する可能性があります。私のレンダーメソッドは、keyLoadedがtrueになるまで読み込み画面を表示します。たぶん、状態を変更する代わりに文字列を返すテスターメソッドがありますが、ネストされた約束呼び出しから文字列配列を返すことができませんでした。 HotelSystemAdmin.testerが実行され、あなたが唯一のcomponentDidMountにコンテキストに機能を結合した状態

答えて

1

は変更されませんように、その現在の状態では

は、コードを読み込み画面で立ち往生したままです。呼び出す必要があります:

HotelAdminService.tester.bind(this)();

関連する問題