Поскольку data.types
является массивом из объектов , я думаю, что вы хотите получить доступ к первой записи в массиве data.types. Поэтому я бы заменил {props.data.types.type.name}
на {props.data.types[0].type.name}
.
. В целях безопасности я проверял бы наличие этого массива и извлекал из него данные, прежде чем использовать его следующим образом:
const Display = ({data}) => {
// destructure properties out of data prop
const { name, id, types } = data;
// extract type name
const typeName = types[0].name;
return (
<>
<h1 className="pokemon-name">{name}</h1>
<p>{id}</p>
<p>{typeName}</p>
</>
);
}
Учитывая, что ваши данные поступают из API, реквизит types
может не заполняться, когда вы пытаетесь получить к нему доступ. Мы можем объяснить этот сценарий так:
Вот пример компонента-оболочки. этот компонент получает асинхронные данные c и отображает компонент Display
.
// import as you would to make React work.
class Wrapper extends Component {
constructor(props) {
super(props);
this.state = {
dataFromApi: false
}
}
componentDidMount() {
// async function to get data from api (ex: fetch)
fetchDataFromAPI().then(res => res.json()).then(data => {
this.setState({ dataFromApi: data })
});
}
render() {
const { dataFromApi } = this.state;
return dataFromApi ?
(<Display data={dataFromApi}>) :
(<span>loading</span>);
}
}
Надеюсь, это имеет смысл ?.
Cheers?!