javascript - 简单地从 api 渲染数据
问题描述
我正在尽我最大的努力来理解这个概念,在浪费了几个小时之后,我想我试着看看是否有人会善意地解决和详细说明这样一个简单的问题
constructor(props) {
super(props);
this.state = {
marketdata: [],
loading: true
}
}
componentDidMount() {
axios.get('https://api.coingecko.com/api/v3/global')
.then(res => res.data)
.then((data) => {
this.setState({ marketdata: data })
console.log(this.state.marketdata.data.market_cap_change_percentage_24h_usd)
})
}
...
render() {
const { coindata, marketdata} = this.state;
<p>{marketdata.data.market_cap_change_percentage_24h_usd}</p>
类型错误:无法读取未定义的属性“market_cap_change_percentage_24h_usd”
我希望能够更好地理解,这样我就可以在整个项目中尝试使用来自 API 的数据时继续前进而不会陷入困境。
解决方案
不完全确定是什么this.setState()
,但我认为它应该设置 member state
。
问题是您尝试在该对象不存在时访问该对象的成员。所以,你应该改变
this.state.marketdata.data.market_cap_change_percentage_24h_usd
到
this.state.marketdata.market_cap_change_percentage_24h_usd
{ marketdata: data }
并不意味着新属性是marketdata.data
,而是冒号(:
)是一个赋值,就像=
,所以marketdata
获取的值data
。
如果这不起作用,请尝试从“从上到下” console.log ,这意味着首先 log this.state
,然后this.state.marketdata
依此类推,直到您看到收到并设置的内容。
推荐阅读
- java - 如何在 Jena TDB 中使用 Openllet OWL2 推理器(或任何其他推理器)?
- webpack - 使用 vue-cli 配置环境特定变量
- php - 想要回显所有项目名称产品。只有最后添加的项目会得到回显。不是全部。
- reactjs - 无法访问 ReactJS 项目中的 robots.txt 文件
- vba - 查找字符串,然后替换接下来的 5 个字符
- c++ - Boost Variant 是否提供与 std 的 hold_alternative 类似的功能?
- python - 通过内部设置的列删除重复的行
- java - 如何获取 Query/Mutation 操作名称
- javascript - 将 body.getAsync() 包裹在同步函数中
- android - Admob 安卓工作室