【发布时间】:2021-12-25 11:51:48
【问题描述】:
我目前正在尝试从 API 获取数据,以便在我的页面上使用它。我正在使用 React 进行编程,我正在尝试将 useEffect 与异步函数一起使用。
谁能告诉我为什么它在页面刷新时中断?
import React, { useEffect, useState } from 'react'
import axios from 'axios'
import './Cryptoinfo.css'
function Cryptoinfo() {
const [coinprice, setCoinprice] = useState([])
const url = `https://api.coingecko.com/api/v3/coins/markets?vs_currency=eur`
useEffect(() => {
async function fetchData() {
try {
const result = await axios.get(url)
setCoinprice(result.data.slice(0, 10))
console.log(result)
} catch (e) {
console.error(e)
}
}
fetchData()
}, [url])
return (
<>
<div className='crypto-info-container'>
<div className='name-pic'>
<h3 className='crypto-info-img'>O</h3>
<h3 className='crypto-info-name'>Name</h3> //this should be coinprice[0].name but it breaks if i do that.
</div>
<h3 className='crypto-info-price'>Price</h3>
<h3 className='crypto-info-mc'>Marketcap</h3>
<h3 className='crypto-info-vol'>Volume (24hr)</h3>
<h3 className='crypto-info-sup'>Circulating supply</h3>
</div>
</>
)
}
export default Cryptoinfo
【问题讨论】:
-
coinprice[0]在获取您的数据之前不会有数据。所以你会做undefined.name这会抛出一个错误 -
coinprice[0] 最初是未定义的,因为从 API 加载数据需要一秒钟。您可以通过在 JSX 中应用检查来处理此行为,例如:
{ if(coinprice.length > 0) return <h1>coinprice[0].id</h1> }。它只是意味着当数据设置为状态时......渲染它
标签: reactjs use-effect