繁体   English   中英

如何使用 useState() 更新 react-chartjs-2 图

[英]How to update a react-chartjs-2 plot using useState()

我正在尝试更新一个 react-chartjs-2 图,将新的获取日期作为道具从 App.js 传递到 Chart.js 组件。

我创建了一个按钮,该按钮链接到一个在主应用程序中调用 useState 的函数。

目前我已经创建了两个数据集“data2”和“data3”,按钮应该使用“data3”中的数据更新绘图。 但是,每当我单击按钮时,它不会更新绘图,而是变为空白。

我感觉我没有使用正确的方法来更新图,但我没有找到很多关于它的信息。

图表.js

import { Line } from 'react-chartjs-2';



const Chart = ({ data, options, onUpdate }) => {

  const onClick = (e) => {
    e.preventDefault()

    onUpdate()
    console.log(data)
  }

  const dataIn = data[0];
  const optionsIn = options[0];
  
  return(
  <>
    <div className='header'>
      <h1 className='title'>Plot</h1>
      <div className='links'>
        <a
          className='btn btn-gh'
          onClick = {onClick}
        >
          Update plot
        </a>
      </div>
    </div>
    <Line data={dataIn} options={optionsIn} />
  </>
  )
}


export default Chart; 

应用程序.js

import { useState, useEffect } from 'react'
import Chart from './components/Chart'

function App() {

  const data2 = {
  labels: ['1', '2', '3', '4', '5', '6'],
  datasets: [
    {
      label: '# of Votes',
      data: [12, 19, 3, 5, 2, 3],
      fill: false,
      backgroundColor: 'rgb(255, 99, 132)',
      borderColor: 'rgba(255, 99, 132, 0.2)',
    },
  ],
};

  const data3 = {
  labels: ['1', '2', '3', '4', '5', '6'],
  datasets: [
    {
      label: '# of Votes',
      data: [3, 2, 5, 3, 19, 12],
      fill: false,
      backgroundColor: 'rgb(255, 99, 132)',
      borderColor: 'rgba(255, 99, 132, 0.2)',
    },
  ],
};

const options2 = {
  scales: {
    yAxes: [
      {
        ticks: {
          beginAtZero: true,
        },
      },
    ],
  },
};

  const [data, setData] = useState([
    data2
  ])

  const [options, setOptions] = useState([
    options2
  ])


  const updatePlot = () => {
    setData(data3)
    setOptions(options2)
  }


  return (
    <div class="row">
    <Chart data={data} options={options} onUpdate={updatePlot} />
    </div>

  );
}

export default App;

您的代码在useState钩子中有一个括号太多(或者在updatePlot函数中有一个太少)。 以下代码工作正常。

图表.js

import { Line } from "react-chartjs-2";

const Chart = ({ data, options, onUpdate }) => {
  // const dataIn = data[0]; COMMENTED OUT
  // const optionsIn = options[0]; COMMENTED OUT
  // REMOVED onClick function

  return (
    <>
      <div className="header">
        <h1 className="title">Plot</h1>
        <div className="links">
          <a className="btn btn-gh" onClick={onUpdate}>
            Update plot
          </a>
        </div>
      </div>
      <Line data={data} options={options} />
    </>
  );
};

export default Chart;

应用程序.js

import { useState } from "react";
import Chart from "./Chart";

function App() {
  var chartReference = {};

  const data2 = {
    labels: ["1", "2", "3", "4", "5", "6"],
    datasets: [
      {
        label: "# of Votes",
        data: [12, 19, 3, 5, 2, 3],
        fill: false,
        backgroundColor: "rgb(255, 99, 132)",
        borderColor: "rgba(255, 99, 132, 0.2)",
      },
    ],
  };

  const data3 = {
    labels: ["1", "2", "3", "4", "5", "6"],
    datasets: [
      {
        label: "# of Votes",
        data: [3, 2, 5, 3, 19, 12],
        fill: false,
        backgroundColor: "rgb(255, 99, 132)",
        borderColor: "rgba(255, 99, 132, 0.2)",
      },
    ],
  };

  const options2 = {
    scales: {
      yAxes: [
        {
          ticks: {
            beginAtZero: true,
          },
        },
      ],
    },
  };

  const [data, setData] = useState(data2); // REMOVED BRACKETS
  const [options, setOptions] = useState(options2); // REMOVED BRACKETS

  const updatePlot = () => {
    setData(data3);
    setOptions(options2); // This is redundant for the purpose
  };

  return (
    <div class="row">
      <Chart data={data} options={options} onUpdate={updatePlot} />
    </div>
  );
}

export default App;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM