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

IT技术 javascript reactjs axios
2021-01-23 19:01:08

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

axios.get(response){
    this.setState({events: response.data})
}
5个回答

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

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将执行传递给的函数的返回值axios.get('url')称为Promise对象。你可以在这里阅读更多关于它的信息
  • this关键字具有不同的值,具体取决于它被调用的位置。thisinthis.setState 应该指的是构造函数对象,当你this在函数内部调用时,它指的是window对象。这就是我分配this给变量的原因self您可以在此处阅读有关此内容的更多信息

专家提示:

如果您使用 ES6,您会想要使用箭头函数(它们没有自己的this)并且使用this.setState而不分配this给变量。更多关于它在这里

    axios.get('/url')
     .then((response) => {
       console.log(response);
       this.setState({events: response.data})
     })
    .catch((error)=>{
       console.log(error);
    });

这是一个完整的示例https://codesandbox.io/s/rm4pyq9m0o包含通常用于获取数据的最佳实践,包括错误处理、重试和加载。这提供了更好的用户体验我们鼓励您修改代码并尝试获得更多有关它的见解。

你好,我知道我来不及回复,但这个答案节省了我很多时间和精力。谢谢
2021-03-28 19:01:08
无法弄清楚我的代码出了什么问题,幸运的是我偶然发现了这个答案。谢谢!
2021-04-05 19:01:08

这不起作用,因为“this”在 axios 内部是不同的。axios 中的“this”指的是 axios 对象,而不是您的 react 组件。您可以使用 .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 });
});

简单试试这个节点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>
    )
  }
}

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

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

到目前为止,我会使用类似于 checkenrode 所说的内容。

做这样的事情:

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