【问题标题】:Unable to get data using Fetch API in React无法在 React 中使用 Fetch API 获取数据
【发布时间】:2016-11-04 04:52:40
【问题描述】:

我有以下函数,可以调用 api 并获取数据。

export function getUserData(url){

  return fetch(url, { credentials : 'include'})
              .then((response) => { return response.json()})
              .then((data) =>{ return new User(data.uid, data.givenName, data.familyName)})
}

这是我的用户对象。

class User{
  constructor(uid, givenName, familyName){

    this.uid = yguid;
    this.givenName = givenName;
    this.familyName = familyName;
  }
}
export default User;

现在在我的 react 组件中,我正在尝试实例化 User 对象。

class Header extends React.Component {

    constructor(props) {
      super(props);
      this.state = { fullName: null, yguid: null };

    }
    componentWillMount(){
       user = getUserData(url);
       console.log(user);
       //set state with User data
    }

我的 React 组件中有以下导入语句。

import User from '../models/user';
import '../api/util';

我的用户和函数 getUserData 都未定义。我做错了什么,我该如何解决。提前致谢。

【问题讨论】:

  • url 参数从何而来?您是否尝试过通过破坏导入您的功能? import { getUserData } from '../api/util'; ?

标签: javascript reactjs fetch-api


【解决方案1】:

您的代码 user = getUserData(url) 正在将用户设置为获取承诺。您还需要在那里设置解析器。我会这样写

componentWillMount(){
 let user; 
 // getUserData actually returns a promise. resolve with a .then and set user to result
getUserData(url).then((result) => {
 user = result;

 console.log(user); // user should be defined here

 // not sure if user is a state object or not but if it is set it like this
 this.setState({user: user})
 })
}

【讨论】:

  • 这有帮助,但只是好奇,设置状态是否必须在 then() 中。
  • 是的,因为 getUserData 是一个异步函数,这意味着 javascript 将执行它并在 promise 解决之前立即转到下一件事,结果返回,这将导致用户未定义。每当您处理与状态相关的 ajax 调用时,您需要确保 setState 在 .then 内,否则您将无法定义。
猜你喜欢
  • 2018-07-20
  • 2020-06-03
  • 2019-01-05
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 2021-07-26
相关资源
最近更新 更多