使命:
这部分是为了充分说明我正在尝试做的事情,以及我正在使用的代码。
我正在尝试使用ajax调用设置SearchContainer
组件的状态。返回的数据如下所示:
[
{
"id":903,
"name":"Adrian College",
"url":"https://en.wikipedia.org/wiki/Adrian_College",
"nickname":"Bulldogs",
"city":"Adrian",
"state":"Michigan",
"conference":"Michigan Intercollegiate Athletic Association",
"athletics_url":null,
"enrollment":20000,
"selectivity":"High",
"slug":null,
"college_sports":[
{
"sport":{
"id":71,
"name":"Softball",
"gender":"Female",
"division":"Division III"
}
},
{
"sport":{
"id":68,
"name":"Volleyball",
"gender":"Female",
"division":"Division III"
}
}
]
}
]
我正在使用以下ajax(在SearchContainer
组件中)获取此信息,然后我尝试使用返回的数据设置filteredColleges
的状态(在上面引用):
$.ajax({
url: `/api/search/colleges.json/?query=${query}`,
method: 'GET',
success: (data) => {
this.setState({ filteredColleges: data });
}
});
我将更新我的SearchResults
组件,如下所示:
<SearchResults filteredColleges={ this.state.filteredColleges }/>
在SearchResults
内,我呈现以下内容:
const colleges = this.props.filteredColleges.map( function(college) {
return <College college={college} key={college.id}/>
});
在每个College
组件中,我希望能够引用属于该大学的体育列表。
我的问题:
当我尝试在filteredColleges
组件中设置SearchContainer
的状态...
this.setState({ filteredColleges: data });
我收到以下错误:
Uncaught Error: Objects are not valid as a React child (found: object with keys {sport}).
我尝试过多种不同方式解析数据,但没有运气。我很确定这意味着我的sport
数组中不能有data
个对象?我正确地解释了这个错误吗?有没有办法解决这个问题?
编辑#1:分享我的学院组件
import React from 'react';
export default class College extends React.Component{
constructor(props) {
super(props);
}
render() {
const { name, nickname, conference, url, enrollment, selectivity, city, state } = this.props;
return (
<tr>
<td>{ this.props.college.name }</td>
<td>{ this.props.college.nickname }</td>
<td>{ this.props.college.conference }</td>
<td><a href={ this.props.college.url } target="blank">{this.props.college.url}</a></td>
<td>{ this.props.college.enrollment }</td>
<td>{ this.props.college.selectivity }</td>
<td>{ this.props.college.city }</td>
<td>{ this.props.college.state }</td>
<td>{ this.props.college.college_sports }</td>
</tr>
)
}
}
答案 0 :(得分:1)
我认为问题是你的College
组件直接从college_sports
数组输出对象,如:
const college_sports = this.state.college.college_sports
<ul>
{ college_sports.map(sport=> <li>{sport}</li>) }
</ul>
但是你不能输出整个对象,就像错误说的那样。尝试类似:
const college_sports = this.state.college.college_sports
<ul>
{ college_sports.map(sport=> <li>{sport.name}</li>) }
</ul>
答案 1 :(得分:0)
这里发生的是在数组中有多个具有相同名称的对象。您可以更改您的api,为您提供一个没有对象名称或此部分的唯一对象名称的数组。