无法从API访问json数据

时间:2017-03-25 10:32:02

标签: javascript json reactjs react-native axios

在个人资料中分配新值(最初' c')

componentWillMount() {
//state declaration
    this.state = {
      profile: 'c'
   }
    //changing state
    axios.get('http://15.166.45.231:8080/notifications?
         user_email=anurag@anurag.com')
          .then(response => this.setState({
              profile: 'Changed' , function () {
                console.warn(this.state.weather);
            }
            }))
          .catch(function (error) {
                console.log(error);
          });

数据保持不变

输出

c

相反,我甚至试图明确尝试将数据指定为已更改,但徒劳无功。

原始API提取代码:

componentWillMount() {
//state declaration
    this.state = {
      profile: {}
   }
    //changing state
    axios.get('http://15.166.45.231:8080/notifications?
         user_email=anurag@anurag.com')
          .then(response => this.setState({
              profile: response.data , function () {
                console.warn(this.state.weather);
            }
            }))
          .catch(function (error) {
                console.log(error);
          });

数据是返回响应的属性。(返回的内容之一就像标题等)。

示例json数据:

[{"date": "2017-03-25 05:43:01.362975+00:00", "from": "anurag", "status": "Pending", "type": "1", "to": null}, {"date": "2017-03-25 06:00:46.736505+00:00", "from": "anurag", "status": "Pending", "type": "2", "to": null}]

2 个答案:

答案 0 :(得分:0)

setState中的回调方法不正确。它应该是:

axios.get('http://15.166.45.231:8080/notifications?
         user_email=anurag@anurag.com')
          .then(response => 
                 this.setState({ profile: response.data},()=> {
                console.warn(this.state.weather);

            }))
          .catch(function (error) {
                console.log(error);
          });

答案 1 :(得分:0)

//changing state
axios.get('http://15.166.45.231:8080/notifications?
     user_email=anurag@anurag.com')
      .then(response => this.setState({
          profile: response.data , function () {
            console.warn(this.state.weather);
        }
        }))
      .catch(function (error) {
            console.log(error);
      });

这是你的代码。它有一个非常简单的问题。

There are 2 forms of setState - 
1. setState(obj, function callBackAfterStateUpdation)
2. setState(function(previousState, propsWhenStateIsUpdated), function callBackAfterStateUpdation)

其中第二个参数在两种形式中都是可选的。

您正在使用第一个表单,该表单接受表示当前状态的对象,并在设置状态后执行回调。

response => this.setState({
          profile: response.data , function () {
            console.warn(this.state.weather);
        }
        })

这是您的代码出了什么问题。它应该是

response => this.setState({ profile: response.data }, function () {
            console.warn(this.state.weather);
        })

此外,最好保持代码的一致性。您正在使用 - function(){} - 在某些地方,而胖箭头函数 - ()=> {} - 在其他人。选择其中之一,但坚持下去。