【问题标题】:React native passing response from request反应来自请求的本机传递响应
【发布时间】:2016-02-27 16:52:55
【问题描述】:

我有一个主课

class test extends Component

我创建了一个组件来呈现登录页面

var PageLogin = React.createClass({

所以在testrender 方法中我可以这样做

return (
  <View>
    <PageLogin></PageLogin>
  </View>
)

此登录类使用触发PageLogin 组件的login 方法的表单。 login 方法使用简单的fetch 将数据发布到服务器。

login: function (values) {
  AsyncStorage.getItem('@test:app_access_token', (error, token) => {
    fetch(Config.BASE_URI + Config.LOGIN_URI, {//omitted})
    .then((response) => response.json())
    .then((responseData) => {
        return responseData;
    })
    .done();
  });
},

所以我从表单提交按钮开始

var response = this.login(values); 但是当我调试response时它是null

【问题讨论】:

    标签: reactjs react-native


    【解决方案1】:

    您的登录请求触发了异步请求,因此您无法使用var response = this.login(values); 处理响应

    尝试将您的代码更改为:

    login: function (values) {
      return new Promise((resolve) => {
        AsyncStorage.getItem('@test:app_access_token', (error, token) => {
        fetch(Config.BASE_URI + Config.LOGIN_URI, {//omitted})
        .then((response) => response.json())
        .then((responseData) => {
            resolve(responseData);
          });
        });
      });
    },
    
    this.login(values).then((res)=>{
      var response = res;
    });
    

    【讨论】:

    • 我把它改成了你的建议,但响应仍然为空
    • 你确定你的 API 响应有数据吗?
    • 我确定,我添加了一个控制台日志,我在其中返回 responseData 并在其中引用它 response = res。第一个输出来自后者的null,第二个输出来自fetch 方法,其中有实际响应。
    • 删除后同样的问题
    • 我编辑了我的答案以使用 Promise,问题仍然存在吗?
    猜你喜欢
    • 2018-09-17
    • 1970-01-01
    • 2019-10-30
    • 2018-08-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    相关资源
    最近更新 更多