主要问题是当我console.log "datasource"数组时,它首先显示的是我想要填充的数组,即:
[
0:{ date: date, value: value },
1:{ date: date, value: value },
...
]
但是在第一个日志加载之后,它突然变成一个空数组[];
下面是我的代码:
import React, {useState, useEffect} from 'react'
import { ChartComponent, LineSeries, ColumnSeries, SeriesDirective, SeriesCollectionDirective, Inject } from '@syncfusion/ej2-react-charts'
import axios from 'axios'
const StablesTVLchart = () => {
const [stables, setStables] = useState([])
const dates = new Array;
const totalCirculating = new Array;
const totalPegged = new Array;
const datasource = new Array;
useEffect(() => {
axios.get('https://stablecoins.llama.fi/stablecoincharts/all?stablecoin=1')
.then(res => {
setStables(res.data)
// Populate dates array and totalCirculating array /
for (var i = 0; i < stables.length; i++){
dates.push(parseFloat(stables[i].date))
totalCirculating.push(data[i].totalCirculatingUSD)
}
// Populate totalPegged array /
for (var y = 0; y < totalCirculating.length; y++){
totalPegged.push(totalCirculating[y].peggedUSD)
}
// Populate datasource array with date and totalPegged /
for (var e = 0; e < datadate.length; e++){
datasource.push({ date: dates[e], value: totalPegged[e] })
}
})
.catch(err => {
console.log(err)
})
}, []);
console.log(datasource);
const primaryxAxis = {visible: false }
const primaryyAxis = { labelFormat: '${value}K', visible: false }
const palette = ["skyblue"]
return (
<div className="w-full">
<ChartComponent id="charts" primaryXAxis={primaryxAxis} primaryYAxis={primaryyAxis} palettes= {palette}>
<Inject services={[ColumnSeries, LineSeries]} />
<SeriesCollectionDirective>
<SeriesDirective dataSource={datasource} xName='date' yName='value' name='TVL'/>
</SeriesCollectionDirective>
</ChartComponent>
</div>
)
}
export default StablesTVLchart
我推测,我可能需要以某种方式使这个数据源数组成为一个状态数组?
如果任何人有任何线索或想法如何做到这一点,我会非常感激。
2条答案
按热度按时间vfwfrxfs1#
从您提供的代码中可以看出,您正在使用state来存储数据,但马上就要尝试使用它,我将提醒您,React可能会将多个setState()调用批量处理到单个更新中,以提高性能。
同样为了提高代码的可读性,您可以使用如下代码:
jjjwad0x2#
api返回一个数组。你把api的响应存储在一个你不使用的状态中。然后你把原始响应的部分数据存储在4个数组中(使用
push
)。您尝试使用其中一个变异数组(datasource
),但只要重新渲染视图(因为setStables(res.data)
)数组是用空数组重新创建的。另外,异步更新变量/常量和改变数组不会导致重新呈现,即使它会做出React,也不会检测到变化,也不会改变视图。解决方案:
1.使用
Array.map()
基于api的响应数组创建一个新数组1.将Map结果存储到州中,并在视图中使用该州
示例: