Редактировать //
Полагаю, мой вопрос не так ясен. Я пытаюсь вернуть один парк, когда мой URL-адрес указывает на http://localhost:1233/details/‘${parkcode}’. Я определил параметр для URL-адреса в моем файле results.js. Но у меня возникают проблемы с определением this.setState в файле details.js для отображения только одного результата парка на основе идентификатора, который также является кодом парка.
Я новичок в React (и, возможно, в JavaScript, я больше не знаю). Я следую учебному пособию - вместо использования пакета npm для API я решил разветвиться и использовать axios.get () для получения данных из API. Я могу отобразить результаты из компонента в браузер, однако после добавления на досягаемости маршрутизатора (я предполагаю, что он похож на React Router), у меня возникают проблемы при отображении только одного результата моего вызова API в качестве страницы, которую я пытаюсь выполнить. сборка должна показывать только ОДИН результат на основе идентификатора, который я определил.
В моем главном файле, который здесь представляет собой Results.js, я могу без проблем получить данные и включить их в свой файл с помощью JSX и отобразить их. Я пытаюсь использовать ту же логику, что и на этой странице на моей странице Details.js (на этой странице должен отображаться только один результат с идентификатором в маршруте).
Как я использую axios в Results.js
componentDidMount() {
axios
.get(
"https://developer.nps.gov/api/v1/parks?stateCode=wa&fields=images&api_key=" +
`${nps}`
)
// https://css-tricks.com/using-data-in-react-with-the-fetch-api-and-axios/
.then(res =>
res.data.data.map(park => ({
description: `${park.description}`,
fullname: `${park.fullName}`,
states: `${park.states}`,
parkcode: `${park.parkCode}`,
image: `${park.images[0] ? park.images[0].url : "No Image"}`,
designation: `${park.designation}`
}))
)
.then(parks => {
this.setState({
parks
});
console.log(parks);
});
}
Как я пытаюсь использовать ту же логику в Details.js
Он не распознает park.name, хотя я сделал вызов API. Однако, если я жестко запрограммировал паркинг [0] .name, он работает. Я понятия не имею, что я делаю здесь не так. Это может быть очевидной проблемой, но помогите мне.
class Details extends React.Component {
constructor (props) {
super(props);
this.state = {
loading: true,
}
}
componentDidMount() {
axios
.get(
"https://developer.nps.gov/api/v1/parks?stateCode=wa&fields=images&api_key=" +
`${nps}`,
{ id: this.props.id }
).then(res => {
const park = res.data.data.map(park => ({
description: `${park.description}`,
fullname: `${park.fullName}`,
states: `${park.states}`,
parkcode: `${park.parkCode}`,
image: `${park.images[0] ? park.images[0].url : "No Image"}`,
designation: `${park.designation}`
}))
console.log(park.name);
this.setState({
name: park.name;
loading: false
})
}).catch(err => {
this.setState({error: err});
})
}
Я ожидаю, что страница распознает идентификатор, как определено в GET-запросе, вместе с аксио, и отобразит детали парка относительно идентификатора. Но сейчас он ничего не делает, и я застрял на этом навсегда: (