4 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊
更新:根據(jù)Finnhub API,它是您從 API 收到的對(duì)象,而不是數(shù)組。這意味著charData.length
在我之前的回答中永遠(yuǎn)不會(huì)被評(píng)估true
,子組件也QuoteChart
永遠(yuǎn)不會(huì)被渲染。
我建議進(jìn)行以下更改。在您的父組件中,charData = null
最初制作:
const?[chartData,?setChartData]?=?useState(null);
當(dāng) API 返回響應(yīng)并chartData
分配了一個(gè)值時(shí),您的子組件可以呈現(xiàn):
{chartData?&&?<QuoteChart?chartData={chartData}?iex={iex}?/>}
您要在子組件中呈現(xiàn)的圖表需要以下輸入:[{ x: date, y: [O,H,L,C] }]
。因?yàn)?code>map()只能在數(shù)組上調(diào)用而chartData
不是一個(gè)數(shù)組,所以您應(yīng)該導(dǎo)航到所述對(duì)象內(nèi)的數(shù)組之一,例如chartData.t
:
const chartRender = chartData.t.map((timestamp, index) => ({
? ? x: new Date(timestamp),
? ? y: [chartData.o[index], chartData.h[index], chartData.l[index], chartData.c[index]],
}));
最后,series.data需要一個(gè)數(shù)組,你不需要另外將它包裝在一個(gè)對(duì)象中。所以這應(yīng)該有效:
const config = {
? ? series: [{
? ? ? ? data: chartRender
? ? }]
};
您chartData使用空數(shù)組進(jìn)行初始化,因此您的條件應(yīng)如下所示:
{chartData.length && <QuoteChart chartData={chartData} iex={iex} />}
如果您希望 API 返回一個(gè)空列表,我建議設(shè)置一個(gè)undefinedornull作為 的初始值chartData:
const [chartData, setChartData] = useState(null);
在這種情況下,您可以保持現(xiàn)狀。

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
如果我沒(méi)記錯(cuò)的話,你可以簡(jiǎn)單地使用 async/await 來(lái)解決你的問(wèn)題。因此,將 useEffect 行更改為
useEffect(async () => { {/*Fetching API response here to set state*/}
進(jìn)而
await axios .get( `https://finnhub.io/api/v1/stock/candle?symbol=${symbol}&resolution=15&from=1572651390&to=1602623478&token=xxxxxxxxx` )
然后你的應(yīng)用程序應(yīng)該等待 axios 完成獲取

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
最簡(jiǎn)單的方法需要對(duì)代碼進(jìn)行簡(jiǎn)單的小改動(dòng):
{chartData.length && <QuoteChart chartData={chartData} iex={iex} />}
研究 finnhub 后 - 我發(fā)現(xiàn)響應(yīng)不是數(shù)組。我測(cè)試了這個(gè)網(wǎng)址:
https://finnhub.io/api/v1/stock/candle?symbol=AAPL&resolution=15&from=1572651390&to=1602623478&token=
響應(yīng)是一個(gè)具有“c”屬性的對(duì)象。您的代碼應(yīng)該相應(yīng)地修改。對(duì)于上面的鏈接示例:
setChartData(res.data.c);

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
您需要將 axios 調(diào)用包裝在異步函數(shù)中,wait然后
useEffect(() => { {/*Fetching API response here to set state*/}
const getInfo = async () => {
await res = axios
.get(
`https://finnhub.io/api/v1/stock/candle?symbol=${symbol}&resolution=15&from=1572651390&to=1602623478&token=xxxxxxxxx`
)
console.log(res.data);
setChartData(res.data);
}
getInfo()
}, [symbol]);
添加回答
舉報(bào)