Chart.js 3.5.1 버전으로 차트를 렌더링 할때 destroy하고 다시 렌더링해야 하는 이슈
안녕하세요 강사님 :)
저는 현재 Chart.js 3.5.1 버전으로 프로젝트를 따라가는 중입니다.
그런데 아래와 같은 코드로 할 경우에 서로 다른 나라를 클릭해서 차트를 렌더링하게 되면 차트를 destroy 해야한다는 에러메세지가 뜹니다.
function renderChart(data: number[], labels: string[]) {
const ctx = ($('#lineChart') as HTMLCanvasElement).getContext('2d');
Chart.defaults.color = '#f5eaea';
Chart.defaults.font.family = 'Exo 2';
Chart.register(
LineElement,
LineController,
CategoryScale,
LinearScale,
PointElement,
Filler
);
new Chart(ctx, {
type: 'line',
data: {
labels,
datasets: [
{
label: 'Confirmed for the last two weeks',
backgroundColor: '#feb72b',
borderColor: '#feb72b',
data,
fill: true,
},
],
},
options: {},
});
}
그래서 이를 해결하기 위해 아래와 같은 코드를 작성했더니, 제대로 렌더링이 됐습니다.
그러나 제대로된 해결 방법인지 잘 모르겠어서 질문 드립니다.
casetChart라는 변수에 any 대신 Chart 인스턴스의 타입을 넣어야할거같은데, chart.js 노드모듈 폴더의 index.esm.d.ts 파일을 봤는데 어떤걸 가져와서 넣어야하는지 모르겠습니다.
그리고 아래와 같은 방식으로 destroy 하는 게 맞는 방법인지 궁급합니다.
let casesChart: any;
function renderChart(data: number[], labels: string[]) {
const ctx = ($('#lineChart') as HTMLCanvasElement).getContext('2d');
if (casesChart !== undefined) {
casesChart.destroy();
}
Chart.defaults.color = '#f5eaea';
Chart.defaults.font.family = 'Exo 2';
Chart.register(
LineElement,
LineController,
CategoryScale,
LinearScale,
PointElement,
Filler
);
casesChart = new Chart(ctx, {
type: 'line',
data: {
labels,
datasets: [
{
label: 'Confirmed for the last two weeks',
backgroundColor: '#feb72b',
borderColor: '#feb72b',
data,
fill: true,
},
],
},
options: {},
});
}
답변 1
1
차트 렌더링 하실 때 이미 차트를 그릴 Canvas 태그가 사용 중이어서 렌더링이 안된다는 에러 메시지인 것 같아요. 차트를 그리고 나서 새로운 데이터 셋으로 다시 차트를 그리는 API가 있으면 그걸 사용하시면 되고 아니면 지금 처럼 destroy 하시고 다시 생성해 주시는 것도 괜찮을 것 같습니다 :)
0
https://www.chartjs.org/docs/latest/developers/api.html
위 문서를 참고해서 update 메소드를 사용해봤으나 똑같은 에러가 발생해서 :(
지금 코드 그대로 destory해서 렌더링하는 방식으로 유지했습니다!
-
0
152
1
[오류문의] import 에러
0
290
1
api가 중단된 건에 대하여..
1
397
2
프로젝트 완성본 github에 어디있나요?
1
361
2
https://api.covid19api.com/summary에 있는 원격 리소스를 차단
3
795
2
d.ts 컴파일 시 에러 질문 드립니다.
1
635
2
chartjs 타입시.. 직접 declare module chart.js로 하게 되면 내부의 구조를 모를 것 같은데요
1
603
2
COVID19 API 미작동(404) 질문
1
840
2
innerText부분 오류 문의.
1
689
2
Total Recovered가 화면에 0으로 나옵니다.
1
409
1
강의 내용 질문입니다.
2
451
1
요즘 바벨 사용 여부가 궁금합니다.
1
509
1
프로젝트 내 특정 파일만 Typing
1
579
1
소스질문
1
609
1
추후 강의에 관한 질문
2
411
1
rootdir, include 차이가 궁금합니다
1
686
1
Uncaught ReferenceError: exports is not defined 에러 해결
1
1845
1
function $(selector) 관련 질문 드립니다.
1
319
1
Uncaught ReferenceError: exports is not defined
1
474
1
웹팩 에러 문의
1
868
2
innerHTML optional 체이닝
2
1927
1
화살표 함수 문법 소개 글 링크가 잘못되어 있습니다.
1
243
1
실전 적용 관련 질문 입니다.
1
311
1
모듈 알리아스(as) 질문 드립니다.
1
385
1





