chart.js случайные странные проблемы

#javascript #chart.js

#javascript #chart.js

Вопрос:

для меня это не имеет абсолютно никакого логического смысла.

мой graph.js работал до тех пор, пока он случайно не остановился после передачи локального хранилища в качестве реквизита. я провел рефакторинг, чтобы сделать передачу prop полностью не связанной с локальным хранилищем… что все равно не должно иметь значения.

по какой-то причине каждое число, которое я ввожу в поле данных, работает, ЗА исключением случаев, когда я добавляю props.score / number или ЧТО-ЛИБО переназначает это число. я никогда не видел ничего подобного. когда я консольный номер журнала равен 82. это число (оно синее в консоли), но когда я помещаю его в chart.js он просто не появится.

что, черт возьми, происходит ?!

это похоже на ввод 2 2 в калькулятор и получение 5. я буквально понятия не имею, что сейчас пытаюсь разобраться в этом, может быть, 4 часа без абсолютно никакого ответа. еще раз…

эта ошибка произошла случайно только сегодня, до этого мое приложение работало нормально … ?!

сделал chart.js изменить что-то со вчерашнего дня? это случайная ошибка?

я никогда не сталкивался с такой проблемой после столь долгого отката. не имеет смысла.

 import {useEffect} from 'react'
import Chart from 'chart.js';
import './BreakDown.css'

const LineChart = (props) => {
  const number=props.score ***i am trying to get props.score into the chart js data point. 

  console.log(number) ****this console logs 82

  const newNumber=10 number
console.log(newNumber) ***this console logs 92

  useEffect(()=>{
    var ctx = document.getElementById('myLineChart');

    var myChart = new Chart(ctx, {
        type: 'line',
        responsive:true,
        data: {
            labels: ['X', 'IQ', 'X'],
            datasets: [{
                label: 'Your Score',
                data: [0,newNumber,0], ***no matter what i do plug in in either of these numebnrs here doesn't work. 
                backgroundColor: [
                  'rgba(54, 80, 235, 0.2)',
                  'rgba(54, 80, 235, 0.2)',
                  'rgba(54, 162, 235, 0.2)'
                ],
                borderColor: [
                    'rgba(255, 99, 132, 1)',
                    'rgba(54, 162, 235, 1)',
                    'rgba(255, 206, 86, 1)',
                ],
                borderWidth: 1,

            },
            {
                label: 'Average',
                data: [0, 100, 0],
                backgroundColor: [
                    'rgba(54, 162, 235, 0.2)',
                    'rgba(54, 162, 235, 0.2)',
                    'rgba(54, 80, 235, 0.2)',
                ],
                borderColor: [
                    'rgba(255, 99, 132, .5)',
                    'rgba(255, 99, 132, .5)',
                    'rgba(255, 99, 132, .5)',
                ],
                borderWidth: 1
            }]
        },
        options: {
            scales: {
                yAxes: [{
                    ticks: {
                        beginAtZero: false,
                        suggestedMin: 70,
                    suggestedMax: 160,
                    stepSize: 10
                    }

                }]
            }
        }
    });
  },[])
  return (
    <div >
    <canvas id="myLineChart" width="650" height="400"></canvas>
</div>
  )
}

export default LineChart

 

чтобы сделать вещи ЕЩЕ более странными, если я подключу newNumber к диаграмме, в этом случае он дает мне 10, даже несмотря на консоль.регистрация newNumber дает мне 92… ДА?!

Ответ №1:

Ваш код отлично работает при первом рендеринге для меня. Я не уверен на 100% из вашего описания, что, по вашему мнению, идет не так, но 1 проблема, которую я вижу, заключается в том, что useEffect будет запускаться только один раз из [] -за второго параметра.

Если ваши prop.score обновления useEffect() не будут запускаться снова, это означает, что ваша диаграмма не будет обновляться.

Основным изменением, которое я сделал ниже, было добавление props.score в массив для useEffect, это указывает useEffect на повторный запуск при props.score изменении. Вы можете прочитать больше об этом в документах useEffect

 import React, { useEffect } from 'react'
import Chart from 'chart.js';

const LineChart = (props) => {
    const number = props.score //***i am trying to get props.score into the chart js data point. 

    console.log(number) //****this console logs 82

    const newNumber = 10   number
    console.log(newNumber) //***this console logs 92

    useEffect(() => {
        var ctx = document.getElementById('myLineChart');

        var myChart = new Chart(ctx, {
            type: 'line',
            responsive: true,
            data: {
                labels: ['X', 'IQ', 'X'],
                datasets: [{
                    label: 'Your Score',
                    data: [0, newNumber, 0],
                    backgroundColor: [
                        'rgba(54, 80, 235, 0.2)',
                        'rgba(54, 80, 235, 0.2)',
                        'rgba(54, 162, 235, 0.2)'
                    ],
                    borderColor: [
                        'rgba(255, 99, 132, 1)',
                        'rgba(54, 162, 235, 1)',
                        'rgba(255, 206, 86, 1)',
                    ],
                    borderWidth: 1,

                },
                {
                    label: 'Average',
                    data: [0, 100, 0],
                    backgroundColor: [
                        'rgba(54, 162, 235, 0.2)',
                        'rgba(54, 162, 235, 0.2)',
                        'rgba(54, 80, 235, 0.2)',
                    ],
                    borderColor: [
                        'rgba(255, 99, 132, .5)',
                        'rgba(255, 99, 132, .5)',
                        'rgba(255, 99, 132, .5)',
                    ],
                    borderWidth: 1
                }]
            },
            options: {
                scales: {
                    yAxes: [{
                        ticks: {
                            beginAtZero: false,
                            suggestedMin: 70,
                            suggestedMax: 160,
                            stepSize: 10
                        }

                    }]
                }
            }
        });
    }, [props.score])
    return (
        <div >
            <canvas id="myLineChart" width="650" height="400"></canvas>
        </div>
    )
}

export default LineChart