chartjs를 사용하다보면 Cannot delete property ‘push’ of [object Array]
에러를 접할 수 있습니다.
저의 경우에는 차트의 데이터에 들어가는 배열을 여러 군데에서 동시에 사용하면서 여러 군데에서 같은 차트를 렌더하고 난 이후에, 차트를 업데이트시키려고 했을 때 발생했습니다.
이 에러 관련하여 발견한 상황은 다음과 같습니다.
_chartJs
프로퍼티를 assign함_chartJs
프로퍼티가 있는 경우 등록했던 listener를 제거함Cannot delete property ‘push’ of [object Array]
_chartJs
프로퍼티는 있으면서 기존에 unlistenArrayEvents 함수가 호출(=push 제거)되었던 배열에 이를 다시 호출하면 push가 이미 지워진 상태이므로 다시 지울 수 없을 것 같음더 자세히 알기 위해서는 라이브러리 내부 코드를 뜯어봐야 했고 확신할 수는 없지만 다음과 같은 동작을 하는 것으로 추측하였습니다.
이를 해결하기 위해서는 여러 군데에서 렌더시, 차트가 들어갈 데이터 배열이 공유되지 않도록 chartData에 들어가는 배열을 매번 새 배열을 생성하여 주입하였습니다.
const chartData: ChartData = {
...
datasets: [
{
data: [...data], // 이전에는 data 자체를 주입했다면 이제는 새로운 배열로 주입
...
},
],
};