2015-11-05 51 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

相关问题