【问题标题】:Why can´t i update my state property in a superagent request?为什么我不能在超级代理请求中更新我的状态属性?
【发布时间】:2016-02-06 21:49:52
【问题描述】:

我有一个按钮监听器,它通过一个超级代理传递一些登录信息,我得到一个返回的令牌。现在我想将我的状态属性更新为收到的令牌,我得到了正确的。但我的 this.state.token 似乎没有更新。

这是我的代码:

_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)
},

【问题讨论】:

  • 异步代码是异步的

标签: reactjs react-native superagent


【解决方案1】:

您在这里处理的不是一个而是两个异步进程:

  1. 发送 ajax 请求,其响应与您当前的代码异步运行。这意味着回调将在您退出此函数后调用

  2. this.setState 不会立即更改它,而是将当前组件的状态安排在稍后更改并重新渲染。

基本意思是:你检查this.state 太早了。

【讨论】:

  • 好的,谢谢。当我在稍后的位置调用该属性时,它起作用了。您是否有任何提示来封装超级代理并“全局”保存令牌?在我的大部分观点中,我都需要令牌,而仅仅通过我的所有组件传递道具对我来说似乎并不好......
  • 将其存储在商店中,因为它是 Flux 的“推荐”
猜你喜欢
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2011-04-22
  • 1970-01-01
  • 2021-12-11
  • 2017-01-30
  • 1970-01-01
相关资源
最近更新 更多