React / React-Native无法将JSON数据分配给状态变量

时间:2015-12-18 10:27:48

标签: javascript json reactjs react-native

我在react-native中有一个状态变量(wallsJSON),它应该包含从URL http://unsplash.it/list返回的JSON数据

所以在我的构造函数/ getInitialState中,我设置了像这样的

变量
{
  wallsJSON : []
}

我使用以下函数来获取json数据

  fetchWallsJSON() {
    var url = 'http://unsplash.it/list';
    fetch(url)
      .then( response => response.json())
      .then( jsonData => {
        this.setState({
          isLoading: false,
          wallsJSON: jsonData
        });
      })
      .catch( error => console.log('JSON Fetch error : ' + error) );
  }

我遇到了这个错误:

JSON Fetch error : TypeError: In this environment the target of assign MUST be an object.This error is a performance optimization and not spec compliant.

我尝试使用下划线将返回的数据转换为使用_.object的对象,我也尝试了简单的wallsJson: Object(jsonData)

但没有一个有效。

2 个答案:

答案 0 :(得分:0)

这对我有用。在我解决承诺json

之后,我将返回response.json()
function fetch(url) {

  return fetch(url).then(response =>
    response.json().then(json => {
      return json;
    })
  );
}

如果上述解决方案不起作用,请尝试使用github/fetch中的文档而不使用es6箭头功能。这应该是肯定的。然后我们可以尝试将下面的解决方案转换为es6语法。

fetch('/users.json')
  .then(function(response) {
    return response.json()
  }).then(function(json) {
    console.log('parsed json', json)
  }).catch(function(ex) {
    console.log('parsing failed', ex)
  })

答案 1 :(得分:0)

我认为该错误在您的fetchWallsJson()函数中很明显。 在线response => response.json()上,将结果关联到对象json。 所以下一行应该是

.then(json => { this.setState({
   isLoading: true,
   wallsJson: json, //json.results or something likes that(highly likely)          
          }) 
)

//which would be the same object you assinged your response to.