Blog FQSoft

Just Simple Code Documentation

Javascript Alpinejs

Alpinejs - Menggunakan Chartjs

Faiq Himmah 05 November 2025

Dokumnetasi ini saya buat karena saya mengalami error saat menggunakan chartjs di alipinejs dan bisa jadi kendala ini bisa muncul dengan atau tanpa alipinejs.

Pesan error yang muncul adalah "Maximum call stack size exceeded" dimana error ini muncul setiap ada perubahan data tanpa melibatkan reload page. Sehingga saat perubahan data berbasis ajax chartjs menganggap ada pembuatan double objek chartjs.

Sehingga solusinya adalah setiap ada perubahan data pada chart kita akan lakukan langkah ini :

  1. Hapus objek yang lama
  2. Membuat objek baru dengan setting yang sama
  3. Kemudian masukkan yang data baru

Berikut contoh kodenya

<div x-data="prediksiComponent()" x-init="initChart()">
  <div class="bg-gray-50 p-6 rounded-lg shadow-inner">
    <p class="text-black pb-4 font-bold text-center">Chart JS</p>
    <canvas id="myChart" height="200"></canvas>
  </div>
</div>

<script>
  function prediksiComponent(){
    return {
      chart: null,
      dataChart: {
        labels: ['Suhu', 'Kelembaban', 'Cahaya'],
        datasets: [{
          label: 'Pengaruh',
          data: [0, 0, 0],
          backgroundColor: ['#6366F1', '#10B981', '#F59E0B'],
          borderRadius: 6,
        }]
      },
      updateChart(res) {
          this.dataChart.datasets[0].data = [
            res['suhu'],   // suhu
            res['kelembaban_tanah'],  // kelembaban
            res['intensitas_cahaya']  // cahaya
          ];
          this.chart.destroy();
          this.initChart();
      },
      initChart() {
          const ctx = document.getElementById('myChart').getContext('2d');
                
          if (this.chart) {
            this.chart.destroy();
          }

          this.chart = new window.Chart(ctx, {
            type: 'bar',
            data: this.dataChart,
            options: {
              responsive: true,
              plugins: {
                legend: { display: false }
              },
              scales: {
                y: { beginAtZero: true }
              }
            }
          });
        },
    }
  }
</script>

Keterangan

  • initChart() : Berfungsi untuk menampilkan chart saat page pertama kali diakses tapi tentu saja dengan data kosong. di awal ada if untuk memastikan jika sudah ada objek chart maka di destroy dulu
  • updateChart() : mengambil data baru dari server. lalu destroy objek lama. dan panggil fuction initChart untuk recreate objek chart
  • Jika menggunakan alpinejs pastikan variabel chart dan dataChart berada di scope alpinejs sehingga bisa diakses di semua function dengan this

alpinejs chartjs Maximum call stack size exceeded