【发布时间】:2019-10-22 16:29:00
【问题描述】:
编辑//
我想我的问题不是很清楚。当我的 url 指向 http://localhost:1233/details/‘${parkcode}’ 时,我试图让一个公园返回。我在 results.js 文件中定义了 url 的参数。但是我在 details.js 中定义 this.setState 时遇到了麻烦,以仅根据 id 呈现公园的一个结果,这也恰好是公园代码。
我是 React 新手(可能是 JavaScript,我不知道了)。我正在关注一个教程 - 我决定分支并使用 axios.get() 从 API 获取数据,而不是使用 npm 包作为 API。我能够将组件的结果呈现到浏览器中,但是在添加到达路由器(我假设它类似于 React 路由器)之后,我无法将我的 API 调用的一个结果呈现为我尝试的页面build 应该只根据我定义的 ID 显示一个结果。
在我的主文件中,也就是这里的 Results.js,我能够毫无问题地获取数据,并使用 JSX 将它们包含在我的文件中并渲染它们。我正在尝试使用与我在 Details.js 页面中的该页面中所做的相同的逻辑(该页面应该只向路由中的 ID 显示一个结果)。
我如何在 Results.js 中使用 axios
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 中使用相同的逻辑
即使我进行了 API 调用,它也无法识别 park.name。但是,如果我硬编码 park[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 请求中定义的 id 以及 axios,并呈现与 id 相关的公园详细信息。但是现在,它什么也没做,我一直被困在这上面:(
【问题讨论】:
-
所以你试图在单击时显示单个项目的详细信息??
-
是的!基本上来自我的Results.js,我在呈现所有结果后单击某个公园,它将链接到详细信息页面以显示一个公园的详细信息。
-
看起来像您的 API 返回公园数组。像这样的东西:
[{ name: "park1" }, { name: "park2" }]。如果您希望他们只返回单个公园,您的响应数据应如下所示{ name: "park1" } -
这里有一个与您尝试做的相同的教程codingthesmartway.com/…
-
@vedsmith92 我正在努力弄清楚如何将该部分写入 .then() 当我使用 axios 时它返回一个数组,但我正在努力让它只返回一个.. .
标签: reactjs axios state reach-router