当我的图表组件由于其初始状态而呈现时出现错误,该状态在 API 响应之前是一个空数组。它会说类似这样Cannot read property '0' of undefined的内容,因为当组件加载时,它的初始状态是……一个空数组。所以我想知道是否有办法让组件仅在收到 API 响应后才呈现。
这是父组件:
function InformationPage({
match: {
params: { symbol },
},
}) {
const [chartData, setChartData] = useState([]); {/*Declaring state*/}
useEffect(() => { {/*Fetching API response here to set state*/}
axios
.get(
`https://finnhub.io/api/v1/stock/candle?symbol=${symbol}&resolution=15&from=1572651390&to=1602623478&token=xxxxxxxxx`
)
.then((res) => {
console.log(res.data);
setChartData(res.data);
})
.catch((err) => {
console.log(err);
});
}, [symbol]);
return (
<Grid item container xs={12} sm={12} md={6} lg={8}>
{chartData && <QuoteChart chartData={chartData} iex={iex} />}
</Grid>
);
}
export Default InformationPage;
这是子图表组件,基本上,当我从 axios 执行 fetch 请求时,它会返回一个数组,该数组将映射到chartRender对象中。我只需要在来自 axios 的 api 请求完成后才能找到一种方法来呈现组件,以免出现错误。任何帮助将不胜感激。
function QuoteChart(props) {
const classes = useStyles();
const { chartData } = props;
const chartRender = chartData.map((chartConfig) => ({
x: new Date(chartConfig?.t),
y: [chartConfig?.o, chartConfig?.h, chartConfig?.l, chartConfig?.c],
}));
// const chartDataLog = console.log(chartData);
const config = {
series: [
{
data: [{ chartRender }],
},
],