React:无法从状态获取属性
2017-07-28
2272
我有一个 React 应用,但无法深入了解状态。
import React, { Component } from 'react';
import { Grid} from 'react-bootstrap'
import fetch from 'isomorphic-fetch';
class Pokemon extends Component {
constructor(props) {
super(props);
this.state = {
pokemon: {},
}
}
componentDidMount() {
fetch('https://pokeapi.co/api/v2/pokemon/150/')
.then((response) => {
return response.json()
})
.then((json) => {
this.setState({
pokemon: json,
})
})
}
render () {
const { pokemon } = this.state
console.log(pokemon.species) // works
return (
<Grid>
<p>{pokemon.species.name}</p>
<Image src={this.props.image} responsive alt='member picture' />
</Grid>
)
}
}
export default Pokemon;
使用 React 开发者工具,我可以看到所有数据都处于状态中。
我可以执行
console.log(pokemon.species)
,它返回一个具有两个属性 url 和 name 的对象。但是当我尝试
console.log(pokemon.species.name)
它返回“TypeError:pokemon.species 未定义”
在只有 state = { pokemon: {} } 的状态下,状态看起来像这样。
2个回答
看起来您在 API 响应之前没有 pokemon.species。尝试此操作:
constructor(props) {
super(props);
this.state = {
pokemon: {species:{}},
}
}
Alex Borodin
2017-07-28
这是因为您尝试在数据加载前显示数据。
尝试这个:
class Pokemon extends Component {
constructor(props) {
super(props);
this.state = {
pokemon: null,
}
}
componentDidMount() {
fetch('https://pokeapi.co/api/v2/pokemon/150/')
.then((response) => {
return response.json()
})
.then((json) => {
this.setState({
pokemon: json,
})
})
}
render () {
const { pokemon } = this.state
if (pokemon === null) {
return null;
}
return (
<Grid>
<p>{pokemon.species.name}</p>
<Image src={this.props.image} responsive alt='member picture' />
</Grid>
)
}
}
Ezz
2017-07-28