Я создаю приложение для реагирования, которое будет отображать несколько диаграмм (с помощью ApexCharts), которые необходимо постоянно обновлять при вызове API. Они будут отображать данные датчиков из разных источников.
У меня есть диаграмма, стилизованная и настроенная так, как мне нужно, но если я обновлю данные, изменив массив состояний в выражении setInterval
, за пару итераций диаграмма начинает вести себя странно, как если бы одновременно были конфликтующие обновления.
Это файл приложения. js в CodeSandBox:
//App.js
export default function App() {
const [data, updateData] = useState([1, 2, 3, 4, 5, 6]);
useEffect(() => {
setInterval(() => {
const val = Math.floor(Math.random() * (100 - 30 + 1)) + 30;
let array = [...data, val];
array.shift();
updateData(array);
}, 2000);
});
return (
<div className="App">
<ChartViewer data={data} title="Product Trends by Month" />
</div>
);
}
, а это ChartViewer
component:
import Chart from "react-apexcharts";
export default function ApexChart(props) {
const series = [
{
name: "xx",
data: props.data
}
];
const options = {
chart: {
height: 350,
type: "line",
zoom: {
enabled: true
}
},
dataLabels: {
enabled: false
},
stroke: {
width: 2,
curve: "smooth"
},
colors: ["#210124"],
fill: {
type: "gradient",
gradient: {
shadeIntensity: 1,
inverseColors: true,
gradientToColors: ["#DB162F"],
opacityFrom: 1,
opacityTo: 1,
type: "vertical",
stops: [0, 30]
}
}
}
return (
<div id="chart">
<Chart options={options} series={series} type="line" height={350} />
</div>
);
}
Кроме того, вот ссылка CodeSandbox, по которой вы можете увидеть поведение: https://codesandbox.io/s/purple-monad-5c1i3?file= / src / ChartViewer. js: 41-839
Заранее спасибо