2015-11-05 49 views
0

我有一個Button Listener,通過superagent傳遞一些登錄信息,我得到一個令牌返回。現在我想更新我的狀態屬性到收到的令牌,我正確地得到。但是我的this.state.token似乎沒有更新。爲什麼我不能在superagent請求中更新我的狀態屬性?

Here's我的代碼:

_btnLoginListener: function() { 

    var that = this; 
    superAgentRequest 
     .post(URL + TOKENS_KEY) 
     .type('json') 
     .send({ 
      email: this.state.usernameOrEmail, 
      password: this.state.password 
     }) 
     .end(function (err, res) { 
      // Calling the end function will send the superAgentRequest 
      if (res.status == 200) { 
       /*var token = JSON.parse(res.text).token; // working*/ 
       /*ToastAndroid.show("POST Response -> " + token, ToastAndroid.SHORT)*/ 
       that.setState({ 
        token: JSON.parse(res.text) 
       }) 
       navigator.replace({ 
        id: 'MainController', 
        name: 'MainController', 
       }); 
      } else { 
       notifyMessage ("Please check credentials again!") 
      } 
     }) 
    } 
    notifyMessage (that.state.token) 
}, 
+0

異步代碼異步 – zerkms

回答

0

你正在處理連一個也沒有,但2異步進程在這裏:

  1. Ajax請求被髮送及其響應異步運行到當前的碼。這意味着調用回調函數後退出此功能

  2. this.setState不會立即改變,但時間表當前組件的狀態與它被重新渲染後一起改變了一些時間。

基本上意思是:你太早檢查this.state

+0

好的謝謝。當我在後面的位置打電話給它時,它就起作用了。你是否有任何提示來封裝超級用戶並將「全局」保存爲令牌?我需要在我的大部分視圖中的令牌,只是通過我的所有組件的道具似乎對我來說似乎不好... – BigPun86

+0

將它存儲在商店,因爲它是由Flux推薦的 – zerkms

+0

我會給它一個試試,謝謝 – BigPun86

相關問題