React-native .map undefined 不是对象
2020-04-29
3636
这是我的代码:
componentDidMount() {
console.log(this.props.navigation.state.params.idFilm)
getFilmDetailFromApi(this.props.navigation.state.params.idFilm).then(data => {
this.setState({
film: data,
isLoading: false,
})
})
}
_displayFilm() {
if(this.state != '') {
const { film } = this.state
return (
<ScrollView>
<Image>
</Image>
<View style={styles.overview_container}>
<Text style={styles.overview_title}>{film.title}</Text>
<Text style={styles.overview_description}>{film.overview}</Text>
</View>
<View style={styles.informations_container}>
<Text>Sorti le {film.release_date}</Text>
<Text>Note : {film.vote_average}</Text>
<Text>Nombre de votes : {film.vote_count}</Text>
<Text>Budget : {numeral(film.budget).format('0,0[.]00 $')}</Text>
<Text>Genre(s) : {film.genres.map((item) => {
console.log(item)
})}</Text>
<Text></Text>
</View>
</ScrollView>
)
}
}
film.genres 的 Console.log:
Array [
Object {
"id": 12,
"name": "Aventure",
},
Object {
"id": 14,
"name": "Fantastique",
},
Object {
"id": 10751,
"name": "Familial",
},
]
我遇到了这个错误:
undefined is not an object (evaluating 'film.genres.map')
一切都正常,但类型不对,有人知道为什么 .map 无法与我的对象数组正确配合吗?谢谢。
2个回答
我将介绍以下步骤:
1.首先,在您的类组件中添加初始状态值
state = {
film: null,
isLoading: false,
};
2.其次,您可以在执行 API 调用之前,在 componentDidMount 中触发
isLoading
布尔值为 true
componentDidMount() {
const { navigation } = this.props;
this.setState({ isLoading: true });
getFilmDetailFromApi(navigation.state.params.idFilm).then((data) => {
this.setState({ film: data, isLoading: false });
});
}
3.现在我们可以使用此
isLoading
属性在渲染影片之前渲染微调器或任何加载 UI,因为它们尚无法访问。
_displayFilm() {
const { film, isLoading } = this.state;
if (isLoading) {
return <View>Loading films...</View>;
}
return (
<ScrollView>
<Image></Image>
<View style={styles.overview_container}>
<Text style={styles.overview_title}>{film.title}</Text>
<Text style={styles.overview_description}>{film.overview}</Text>
</View>
<View style={styles.informations_container}>
<Text>Sorti le {film.release_date}</Text>
<Text>Note : {film.vote_average}</Text>
<Text>Nombre de votes : {film.vote_count}</Text>
<Text>Budget : {numeral(film.budget).format('0,0[.]00 $')}</Text>
<Text>
Genre(s) :{' '}
{film.genres.map((item) => {
console.log(item);
})}
</Text>
<Text></Text>
</View>
</ScrollView>
);
}
希望有效。如果您有任何问题,请告诉我!
lndgalante
2020-04-29
请尝试
...
<Text>Genre(s) : {(film && film.genres) && film.genres.map((item) => {
console.log(item)
})}</Text>
...
或
...
<Text>Genre(s) : {(film && film.genres) ? film.genres.map((item) => {
console.log(item)
}) : null}</Text>
...
Shing Ho Tan
2020-04-29