import React, { useRef, useEffect } from 'react'; import { Chart, registerables } from 'chart.js'; import zoomPlugin from 'chartjs-plugin-zoom'; // Registra los módulos necesarios de Chart.js y el plugin de zoom Chart.register(...registerables, zoomPlugin); const Tablero = ({ labels, dataPoints }) => { const canvasRef = useRef(null); useEffect(() => { // Asegúrate de que el código solo se ejecute en el cliente const canvas = canvasRef.current; if (!canvas) { console.error("Canvas element not found"); return; } const ctx = canvas.getContext("2d"); if (!ctx) { console.error("Failed to get canvas context"); return; } // Datos del gráfico const data = { labels: labels, datasets: [{ label: 'f(x)', borderColor: 'rgba(75, 192, 192, 1)', data: dataPoints, fill: false }] }; // Configuración del gráfico const myChart = new Chart(ctx, { type: 'line', data: data, options: { scales: { x: { title: { display: true, text: 'X' }, zoom: { enabled: true, mode: 'x', }, pan: { enabled: true, mode: 'x', }, }, y: { title: { display: true, text: 'f(x)' }, zoom: { enabled: true, mode: 'y', }, pan: { enabled: true, mode: 'y', }, } }, plugins: { zoom: { pan: { enabled: true, mode: 'xy', }, zoom: { enabled: true, mode: 'xy', speed: 0.1, sensitivity: 3, threshold: 2, } } } } }); // Limpieza del gráfico cuando el componente se desmonte return () => myChart.destroy(); }, [labels, dataPoints]); return ; }; export default Tablero;