javascript - 我无法从 this.state 获取数据
问题描述
我从后端收到 JSON,我将它保存在我的状态中,我想在另一个反应组件的 props 中使用它,但它不起作用。
我尝试在我的组件 - 的道具中显示需要日期{this.state.movies["0"]["title"]}
,但它不起作用。
constructor() {
super();
this.state = {
movies: []
}
}
componentDidMount() {
this.getAllMoviesForMainPage();
}
getAllMoviesForMainPage() {
axios.get("http://localhost:8080/showAll")
.then(response => {
this.setState({ movies: response.data })
})
}
render() {
return (
<div className="qwerty">
<MainPageComponent />
<div className='moviePreviewGrid'>
<Router>
<div className="moviePreviewGrid-row">
<div className="moviePreviewGrid-col">
<MoviePreview
Title={this.state.movies["2"]["title"]}
MoviePreviewAvatar={DrivePoster}
SeeMore="unrelated long string here"
/>
<NavLink to="/showByTitle/Драйв">
<button type="button" className="myBtn">See more</button>
</NavLink>
</div>
和我的 JSON 的结构
[
{
"id": 1,
"title": "Джокер",
"releaseDate": "2019",
"genre": "Триллер, драма, криминал",
"duration": "122 минуты",
"rating": 8.7,
"criticReviews": [
{
"criticName": "Anton",
"review": "anton review"
},
{
"criticName": "OldCritic",
"review": "old review"
}
],
"userReviews": [
{
"nickName": "Igor",
"review": "igor review"
},
{
"nickName": "Nik",
"review": "nik review"
}
]
},
{
"id": 2,
"title": "Ирландец",
"releaseDate": "2019",
"genre": "Драма, триллер, криминал, биографический",
"duration": "209 минут",
"rating": 8.4,
"criticReviews": [
{
"criticName": "YoungCritic",
"review": "young review"
}
],
"userReviews": [
{
"nickName": "Gambit",
"review": "gambit review"
},
{
"nickName": "Andrew",
"review": "andrew review"
}
]
},
{
"id": 3,
"title": "Драйв",
"releaseDate": "2011",
"genre": "Боевик, драма",
"duration": "100 минут",
"rating": 7.8,
"criticReviews": [
{
"criticName": "Critic",
"review": "review"
}
],
"userReviews": [
{
"nickName": "Anton",
"review": "anton review"
}
]
},
{
"id": 4,
"title": "Последний человек на Земле",
"releaseDate": "2015",
"genre": "Комедия",
"duration": "22 минуты",
"rating": 7.3,
"criticReviews": [
{
"criticName": "NewCritic",
"review": "new review"
}
],
"userReviews": [
{
"nickName": "Atomf7",
"review": "atomf7 review"
}
]
},
{
"id": 5,
"title": "Интерстеллар",
"releaseDate": "2014",
"genre": "Фантастика, драма, приключения",
"duration": "169 минут",
"rating": 8.6,
"criticReviews": [
{
"criticName": "Nik",
"review": "nik review"
}
],
"userReviews": [
{
"nickName": "Alice",
"review": "alice review"
}
]
}
]
我不会有例如第一部电影的标题
解决方案
在第一个初始化中,this.state.movies
它的长度为 0,所以this.state.movies["2"]["title"]
当然没有任何价值,因为getAllMoviesForMainPage
它是异步的(axios 调用)并且需要更长的时间才能完成,所以首先你必须给它一个初始值,并且只有在请求完成时你可以给它真正的价值。
例子:
<MoviePreview
Title={this.state.movies.length > 0 ? this.state.movies[2].title : ""}
MoviePreviewAvatar={DrivePoster}
/>
通常一个状态,isLoading
用于这种情况。这样您就可以知道何时收到数据。
推荐阅读
- python - Sklearn:使用precision_score和recall_score计算时是否交换了召回和精度?
- go - 在 go 中将请求响应中的数据流式传输到 CSV
- python - PySimpleGUI 在窗口中显示用户选择
- python - 用输入的变量替换整数
- vuejs2 - 扩展异步规则中的 Vee 验证消息无法显示错误消息
- sql - postgresql:您可以在 pgAdmin 中以指定角色运行查询吗?
- android - 导入资源时的问题
- sqlite - 奇怪的 ZQuery 行为
- python - 更改 Matplotlib x 轴上的整数顺序(更直观的时间序列表示)
- html - 文本阴影未在 Chrome 中呈现