在 react.js 和 chart.js 中,我无法访问组件中的数据

In react.js with chart.js, I can't access to my data in a componant

我在 React.js 应用程序中有一个带有 chart.js 的简单图表。我想访问我的组件中的数据。用于创建一个简单的按钮以在我的图表中添加数据。但是他给我发了一个错误。你能帮我解释一下如何在其他组件中访问我的数据吗?非常感谢你。

我的组件BarChart.js

import React from "react"
import { Bar } from 'react-chartjs-2'

const BarChart = () => {
    return (
        <div>
            <Bar 
                data={{
                    labels: ['Paris', 'Boston', 'Berlin', 'Dublin', 'Barcelone', 'Lisbonne'],
                    datasets: [{
                        label: 'Populations en millions',
                        data: [2.2, 0.7, 3.8, 1.4, 1.6, 0.6],
                        backgroundColor: [
                            'rgba(255, 99, 132, 0.2)',
                            'rgba(54, 162, 235, 0.2)',
                            'rgba(255, 206, 86, 0.2)',
                            'rgba(75, 192, 192, 0.2)',
                            'rgba(153, 102, 255, 0.2)',
                            'rgba(255, 159, 64, 0.2)'
                        ],
                        borderColor: [
                            'rgba(255, 99, 132, 1)',
                            'rgba(54, 162, 235, 1)',
                            'rgba(255, 206, 86, 1)',
                            'rgba(75, 192, 192, 1)',
                            'rgba(153, 102, 255, 1)',
                            'rgba(255, 159, 64, 1)'
                        ],
                        borderWidth: 1
                    }]
                }}
            height={500}
            width={500}
            options={{
                maintainAspectRatio: false,
                scales: {
                    yAxes: [
                        {
                            ticks: {
                                beginAtZero: true,
                            },
                        },
                    ],
                },
            }}
            />
        </div>
    )
}

export default BarChart

我的组件ButtonChart.js

import React from "react"
import BarChart from "./BarChart";

const ButtonChart = () => {
    return (
        <div className="inputBox">
            <input type="number" className="inputAdd" placeholder="Valeur" id="inputData"/>
            <input type="text" className="inputAdd" placeholder="Année" id="label"/>
            <button onClick={updateChart()} id="insertData">Ajouter une donnée</button>
        </div>
    )
}

function updateChart() {
    const inputData = document.getElementById('inputData');
    BarChart.data.datasets[0].data.push(inputData.value);
}

export default ButtonChart

enter image description here

访问 BarChart.data 似乎是错误的,因为 BarChart 基本上是一个功能性的 React 组件。

你想要的大概是这样的:

  1. 你有一个 data 数组。
  2. 您想在 BarChart
  3. 中显示 data
  4. 您想为用户提供一个 button,这样当用户单击该按钮时,就会在该 data 数组中添加一个新行。
  5. 并且当 data 数组更改时,您希望 BarChart 刷新并显示更新后的 data 数组。

如果是这种情况,那么我建议检查 React 文档中的 Lifting State Up。这里的用例几乎相同。您有一个跨 2 个组件共享的数据源。

此外,检查 React hooks 的使用情况以检查状态使用情况:https://reactjs.org/docs/hooks-state.html

这是您可以尝试的伪代码:

ParentComponent = () => {

    // 1. Create your data state here using React Hooks
    const [data, setData] = useState([someInitialData]);
    
    return (
        <div>
            // 2. BarChart now relies on the data in the state
            //    Whenever the data updates, the chart refreshes
            <BarChart data={data}/>
            // 3. Pass setData to the component and trigger it with the 
            //    button's onClick handler
            <ButtonChart updateData={setData}/>
        </div>
    );
}