React JS,无法将嵌套数组写入控制台
React JS, can't write nested array inside prop to console
我消费了第 3 方 API 并将响应保存到状态,然后我在响应中将 object 作为 prop 传递给另一个组件。
这是道具
{
"count": 20,
"games": [
{
"id": 66947,
"game_title": "Zelda 64: Dawn & Dusk",
"release_date": "2019-09-22",
"platform": 3,
"developers": [
6043
]
},
{
"id": 49433,
"game_title": "Zelda II - The Adventure of Link",
"release_date": "2013-09-12",
"platform": 38,
"developers": [
6037
]
},
....etc...
]
}
我不知道如何通过映射访问 "games" 数据。所以我想我会尝试简单地将值写入控制台,看看我是否在某个地方犯了一个愚蠢的错误。如果我用这段代码编写道具来控制台。
console.log(this.props.searchResults);
它会像您期望的那样将所有内容写入控制台。但是,如果尝试使用此代码编写游戏数组,则会出现错误。
console.log(this.props.searchResults.games);
这是错误。
TypeError: this.props.searchResults is undefined
我最终要做的是通过游戏数组进行映射并在浏览器中呈现标题,但如果我什至无法在控制台中写入标题,那么我显然有问题。我对 javascript 和 React 都是新手,所以我很确定我缺少一些简单的东西来遍历一个 object 键,它的值是一个数组。
我尝试的另一件事是首先将 "games" 数组发送到组件,但我 运行 遇到了同样的问题。
这个应该和promise有关。由于您能够在控制台中记录道具,这意味着您没有犯任何愚蠢的错误。当您进行 api 调用并将其设置为状态时。在 promise 得到解决之前总是有延迟,因此组件只会将 searchResult 获取为 null。所以,你需要做的就是等待数据被获取。最简单的方法可以是这样的:
Class YourComponent extends React.Component {
state = {
searchResults: {}
}
componentDidMount() {
this.fetchData();
}
fetchData() {
// Load data from api here
this.setState({searchResults: {games: 'just replace this whole setState with your response data' }})
}
render() {
return (
<div>
<ChildComponent searchResults={this.state.searchResults} />
</div>
)
}
}
现在在你的子组件中你可以简单地这样做:
class ChildComponent extends React.Component {
render() {
const {searchResults} = this.props;
return searchResults.games ? (
<div>
{
// Your logic here to use searchResults.games
}
</div>
): <div>Loading</div>
}
}
我消费了第 3 方 API 并将响应保存到状态,然后我在响应中将 object 作为 prop 传递给另一个组件。
这是道具
{
"count": 20,
"games": [
{
"id": 66947,
"game_title": "Zelda 64: Dawn & Dusk",
"release_date": "2019-09-22",
"platform": 3,
"developers": [
6043
]
},
{
"id": 49433,
"game_title": "Zelda II - The Adventure of Link",
"release_date": "2013-09-12",
"platform": 38,
"developers": [
6037
]
},
....etc...
]
}
我不知道如何通过映射访问 "games" 数据。所以我想我会尝试简单地将值写入控制台,看看我是否在某个地方犯了一个愚蠢的错误。如果我用这段代码编写道具来控制台。
console.log(this.props.searchResults);
它会像您期望的那样将所有内容写入控制台。但是,如果尝试使用此代码编写游戏数组,则会出现错误。
console.log(this.props.searchResults.games);
这是错误。
TypeError: this.props.searchResults is undefined
我最终要做的是通过游戏数组进行映射并在浏览器中呈现标题,但如果我什至无法在控制台中写入标题,那么我显然有问题。我对 javascript 和 React 都是新手,所以我很确定我缺少一些简单的东西来遍历一个 object 键,它的值是一个数组。
我尝试的另一件事是首先将 "games" 数组发送到组件,但我 运行 遇到了同样的问题。
这个应该和promise有关。由于您能够在控制台中记录道具,这意味着您没有犯任何愚蠢的错误。当您进行 api 调用并将其设置为状态时。在 promise 得到解决之前总是有延迟,因此组件只会将 searchResult 获取为 null。所以,你需要做的就是等待数据被获取。最简单的方法可以是这样的:
Class YourComponent extends React.Component {
state = {
searchResults: {}
}
componentDidMount() {
this.fetchData();
}
fetchData() {
// Load data from api here
this.setState({searchResults: {games: 'just replace this whole setState with your response data' }})
}
render() {
return (
<div>
<ChildComponent searchResults={this.state.searchResults} />
</div>
)
}
}
现在在你的子组件中你可以简单地这样做:
class ChildComponent extends React.Component {
render() {
const {searchResults} = this.props;
return searchResults.games ? (
<div>
{
// Your logic here to use searchResults.games
}
</div>
): <div>Loading</div>
}
}