承诺错误:对象不能作为React子元素。

38
我试图使用用户代理将JSON设置为状态,但出现错误:

未捕获的不变式违规:对象不是React子级的有效内容(找到具有键{...}的对象)。 如果您想呈现一组子项,请改用数组或使用React附加组件中的createFragment(object)包装对象。

 getInitialState: function(){
    return {
        arrayFromJson: []
    }
},

loadAssessmentContacts: function() {
    var callback = function(data) {
        this.setState({arrayFromJson: data.schools})
    }.bind(this);

    service.getSchools(callback);
},

componentWillMount: function(){
    this.loadAssessmentContacts();
},

onTableUpdate: function(data){

    console.log(data);

},

render: function() {

    return (
        <span>{this.state.arrayFromJson}</span>
    );
}

getSchools : function (callback) {
        var url = 'file.json';
       request
            .get(url)
            .set('Accept', 'application/json')
            .end(function (err, res) {
                if (res && res.ok) {
                    var data = res.body;
                    callback(data);

                } else {
                    console.warn('Failed to load.');
                }
            });
    }

{
"schools": [
{
  "id": 4281,
  "name": "t",
  "dfe": "t",
  "la": 227,
  "telephone": "t",
  "address": "t",
  "address2": "t",
  "address3": "t",
  "postCode": "t",
  "county": "t",
  "ofsted": "t",
  "students": 2,
  "activeStudents": 2,
  "inActiveStudents": 0,
  "lastUpdatedInDays": 0,
  "deInstalled": false,
  "inLa": false,
  "status": "unnassigned",
  "authCode": "t",
  "studentsActivity": 0
},......
]}
2个回答

23
你不能这样做:{this.state.arrayFromJson}。正如错误提示所示,你试图呈现整个数组作为React子元素。这是无效的。你应该遍历数组并呈现每个元素。我使用.map来实现这一点。
我将链接粘贴在这里,你可以从中学习如何使用React呈现数组中的元素。 http://jasonjl.me/blog/2015/04/18/rendering-list-of-elements-in-react-with-jsx/ 希望能有所帮助!

我也遇到了同样的问题,但是当我尝试使用.map时,它会显示我正在映射的内容“不是一个函数”。 - Ant
看看这个能否帮到你:https://dev59.com/JV0a5IYBdhLWcg3wmZsX @Ant - Antonis Zisis

12

因为没有任何指示React如何渲染它,所以不能仅返回对象数组。您需要返回组件或元素数组,例如:

render: function() {
  return (
    <span>
      // This will go through all the elements in arrayFromJson and
      // render each one as a <SomeComponent /> with data from the object
      {this.state.arrayFromJson.map(function(object) {
        return (
          <SomeComponent key={object.id} data={object} />
        );
      })}
    </span>
  );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接