[javascript] Recharts에서 차트의 범례를 클릭하거나 토글하는 방법은 무엇인가요?
다음은 Recharts에서 범례를 클릭하여 차트를 토글하는 예제 코드입니다:
import React, { useState } from "react";
import { LineChart, Legend, Line, CartesianGrid, XAxis, YAxis } from "recharts";
const ChartExample = () => {
const [data, setData] = useState([
{ name: "A", value: 100 },
{ name: "B", value: 200 },
{ name: "C", value: 150 }
]);
const [legendState, setLegendState] = useState({
A: true,
B: true,
C: true
});
const toggleLegend = (name) => {
setLegendState((prevState) => ({
...prevState,
[name]: !prevState[name]
}));
};
const filteredData = data.filter((item) => legendState[item.name]);
return (
<LineChart width={400} height={300} data={filteredData}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="name" />
<YAxis />
<Legend onClick={toggleLegend} />
{Object.keys(legendState).map((name) => (
<Line
key={name}
type="monotone"
dataKey="value"
data={data}
name={name}
stroke={legendState[name] ? "#8884d8" : "#eee"}
activeDot={{ r: 8 }}
dot={false}
/>
))}
</LineChart>
);
}
export default ChartExample;
이 코드에서는 toggleLegend
함수를 생성하여 범례의 상태를 업데이트합니다. 이 함수는 onClick
이벤트에서 호출되며, 클릭된 범례의 상태를 반전시킵니다. 그런 다음 filteredData
배열을 생성하여 표시할 데이터만 필터링합니다. 마지막으로, filteredData
를 사용하여 Line
컴포넌트만 렌더링하고, 활성 상태에 따라 색상을 변경합니다.
이 예제 코드를 사용하여 Recharts에서 차트의 범례를 클릭하거나 토글할 수 있습니다.