如何在反应中设置axios的响应状态

时间:2016-12-17 02:37:07

标签: reactjs axios

如何在axios中设置get响应的状态?

axios.get(response){
    this.setState({events: response.data})
}

5 个答案:

答案 0 :(得分:107)

这里有语法错误。你应该试试这个

this.getClass().getResource("/com/gui/HelloWorld.fxml")

这里有几点需要注意:

  • var self = this; axios.get('/url') .then(function (response) { console.log(response); self.setState({events: response.data}) }) .catch(function (error) { console.log(error); }); //the rest of the code var a = 'i might be executed before the server responds' 是一个异步函数,这意味着将执行其余代码。当服务器的响应到达时,将执行传递给axios.get的函数。 then的返回值称为promise对象。您可以阅读more about it here
  • axios.get('url')关键字具有不同的值,具体取决于调用的位置。 this 中的this应该引用构造函数对象,当您在函数内部调用this.setState时,它引用this对象。这就是为什么我将window分配给变量this。您可以阅读more about this here

专业提示:

如果您使用ES6,您可能希望使用箭头功能(没有自己的self)并使用this而不将this.setState分配给变量。 more about it here

this

以下是一个完整示例https://codesandbox.io/s/rm4pyq9m0o,其中包含常用于获取数据的最佳做法,包括错误处理,再试一次并加载。这提供了更好的用户体验。我们鼓励您修改代码并进行游戏以获得更多有关它的见解。

答案 1 :(得分:25)

这不起作用,因为“这个”在axios内部是不同的。 axios中的“this”指的是axios对象,而不是你的反应成分。您可以使用.bind

解决此问题

也没有正确使用axios。

它应该看起来像

axios.get("/yourURL").then(function(response) {
  this.setState({ events: response.data });
}.bind(this));

或者,如果使用es6,您可以将箭头功能的功能分出来,并在没有绑定的情况下获得相同的效果

axios.get("/yourURL").then(response => {
  this.setState({ events: response.data });
});

答案 2 :(得分:1)

只需尝试此节点js

      axios.get(`https://jsonplaceholder.typicode.com/users`)
       .then(res => {
          const persons = res.data;
          this.setState({ persons });
      })

如果您使用的是 react js ,那么您首先要导入组件而不是使用axios

像这样:

import React from 'react';
import axios from 'axios';
export default class PersonList extends React.Component {
  state = {
    persons: []
  }

  componentDidMount() {
    axios.get(`https://jsonplaceholder.typicode.com/users`)
      .then(res => {
        const persons = res.data;
        this.setState({ persons });
      })
  }

  render() {
    return (
      <ul>
        { this.state.persons.map(person => <li>{person.name}</li>)}
      </ul>
    )
  }
}

答案 3 :(得分:0)

我处理的承诺类似于过去我学习反应的承诺。我所做的是将api调用放在componentDidMount方法上,并将状态设置为初始值。我在获取数据时使用了加载程序。

componentDidMount() {
 const self = this;
 axios.get(response){
  self.setState({ events: response.data });
}

截至目前,我会使用类似于checkenrode所说的内容。

答案 4 :(得分:0)

做这样的事情:

  var self= this; // self will now be referred to your component

  axios.get("http://localhost:3001/get_user?id=" + id)
  .then(function (response) {
    if(response.data.rows != null)
    user_detail = response.data.rows;
    console.log(response);
    self.setState({email: user_detail.name, name: user_detail.name})
  })