У меня есть компонент, в котором я использую ловушку useEffect
для извлечения данных из API. Я хочу отображать данные в виде диаграммы с помощью AMCharts. Моя проблема в том, что мне нужно использовать крючок useLayoutEffect
для создания диаграммы, и диаграмма основана на данных, полученных с помощью useEffect
... Когда моя диаграмма визуализируется, у меня еще нет данных, а моя диаграмма пусто. Как я могу отложить useLayoutEffect
до тех пор, пока данные не будут получены?
Я часто использую useEffect
в своем приложении для получения данных и отображения необходимой мне информации. Я пытался сделать и то, и другое (получить данные и создать диаграмму) в ловушке useEffect
или useLayoutEffect
, но это не сработало. Я не могу использовать условие перед использованием useLayoutEffect
, тоже пробовал ...
const AmChart = (props) => {
const chartRef = useRef(null);
const [data,setData] = useState([]);
const [startDate,setStartDate] = useState(new Date());
const [endDate,setEndDate] = useState(new Date());
useEffect(() => {
let from = startDate.getFullYear().toString() + ('0' + (startDate.getMonth() + 1)).slice(-2) + ('0' + startDate.getDate()).slice(-2);
let to = endDate.getFullYear().toString() + ('0' + (endDate.getMonth() + 1)).slice(-2) + ('0' + endDate.getDate()).slice(-2);
dataService.getData(from,to)
.then(response => {
setData(response.data);
});
},[]);
useLayoutEffect(() => {
let x = am4core.create("chartdiv", am4charts.XYChart);
// ... creation of the chart
chart.data = data;
// ... creation of the chart
chart.current = x;
return () => {
x.dispose();
};
}, []);
return (
<div id="chartdiv" style={{ width: "100%", height: "500px" }}></div>
);
}