即使道具发生变化,React中的ChartJS也不会发生变化-钩子

时间:2019-11-13 10:25:13

标签: javascript reactjs chart.js react-chartjs

我正在建立一个网站,用户可以在其中选择日期和产品,并查看相关库存。通过表格和图表(使用react-chartjs-2)来表示库存。我正在使用React Hooks

道具正确发送,但是我不确定为什么图表没有动态升级。确实会升级钢筋的价值,而不是钢筋本身。

示例:在日期15-11-2019中,产品Desktop ITG56的库存为25

用户可以单击表并修改清单。例如,用户将Desktop ITG56的清单设置为11。

如果我console.log新结果,则包含清单的阵列将更新。但是,条形图不会减少。如果我将鼠标悬停在它上面,它表明库存25被库存11取代了(所以很好!),但是柱线并没有减少。

在用户在表格中输入“ 11”之前

enter image description here

用户在表格中输入“ 11”后 enter image description here

MyGraph组件

import React, {Component,  useState, useEffect, useCallback} from 'react';
import { Line, Bar } from 'react-chartjs-2'


function MyChart({results}) {

    let selected_dates = results['selected_dates']
    let products_results = results['selected_products']


    let my_dataset = []

    var i;
    if (products_results) {
        my_dataset = []

        for (i = 0; i < products_results.length; i++) {
            let dataset_dict = {}
            dataset_dict['label'] = products_results[i]['product_name']
            dataset_dict['data'] = products_results[i]['inventory']
            dataset_dict['lineTension'] = 0.5
            dataset_dict['fill'] = false
            dataset_dict['borderColor'] = products_results[i]['color']
            dataset_dict['backgroundColor'] = products_results[i]['color']
            my_dataset.push(dataset_dict)
            console.log(my_dataset)
        }
    }


    let data = {
        labels: selected_dates,
        datasets: my_dataset
    };

    if (results.length === 0) {
        return null
    } else if (results["selected_dates"].length > 1) {
        return(
            <div>
                    <Line
                        data={data}
                        options={{ maintainAspectRatio: true }}
                        redraw
                    />
                </div>
                )
    } else {
        return(
                <div>
                    <Bar
                        data={data}
                        options={{ maintainAspectRatio: true }}
                        redraw
                    />
                </div>
        )
    }
}

export default MyChart;

0 个答案:

没有答案