使用highcharts时React道具会被覆盖吗?

无畏的

我有一个反应组件,它接收两个输入:数据和规范化器。

<ChartInterface
      normalizer={[10, 10, 10, 10]}
      data={[
        { name: "lineA", data: [2, 1, 1, 2] },
        { name: "lineB", data: [1, 0, 3, 0] }
      ]}
    />

ChartInterface组件应呈现一个复选框和一个图表;如果未选中该复选框,则应仅使用数据绘制图表,效果很好;如果选中此复选框,则组件应将所有data数组除以normalizer数组,我已编写了此函数。

但是,问题是当我反复选中和取消选中此复选框时,数据不断被数组一遍又一遍地划分。

仅当我添加该<HighchartsReact options={chartOptions} highcharts={Highcharts} />组件时,如果我将其注释掉并仅打印chartOptions.lineData复选框此问题将按预期工作。(选中该复选框将显示规范化数据,而取消选中则将显示原始数据作为道具提供)

ChartInterface组件:

const ChartInterface = (props) => {
  // state for checkbox if chart needs to be normalized or not
  const [isNormalized, setIsNormalized] = useState(false);

  //divides one array by another, element-wise
  function normalize(a, b) {
    return a.map(function (x, idx) {
      return x / b[idx];
    });
  }

  // get data for lines
  let lineData = props.data;

  //if normalized is checked, normalize the data
  if (isNormalized) {
    lineData = lineData.map((line) => {
      return {
        name: line.name,
        data: normalize(line.data, props.normalizer)
      };
    });
  }

  // Chartoptions for highcharts, here we add the line data
  const chartOptions = {
    chart: { type: "area" },
    xAxis: {
      type: "category",
      crosshair: true
    },
    plotOptions: {
      area: {
        stacking: "normal",
        lineWidth: 1
      }
    },
    series: lineData
  };

  return (
    <>
      <input
        type="checkbox"
        checked={isNormalized}
        onChange={(e) => setIsNormalized(e.target.checked)}
      />
      Normalise the data ?
      {<HighchartsReact options={chartOptions} highcharts={Highcharts} />}
      {JSON.stringify(lineData)}
    </>
  );
};

我还制作了一个代码沙箱示例,您可以在其中通过选中和取消选中复选框轻松地查看问题所在:问题的codeandbox演示感谢您的帮助

塞巴斯蒂安·温泽(SebastianWędzel)

尝试通过更新状态来更改数据。如何完成您可以在这里找到:https//stackblitz.com/edit/react-6qlksy?file = index.js

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Bootstrap CSS不会被覆盖吗?

导入同名功能会被覆盖吗?

财产子女会被覆盖吗?

避免直接更改道具,因为每当父组件重新渲染时,该值就会被覆盖

使用id选择器时css裁定不会被覆盖

保存图形时,刻度标签会被覆盖

每次创建新实例时,ArrayList都会被覆盖

调用printf时,为什么EDX的值会被覆盖?

当多个文件处于活动状态时,Filereader会被覆盖

每次调用Func时,UIView都会被覆盖-Swift

每次调用Func时,UIView都会被覆盖

即使使用!important,字体大小也会被覆盖

使用bootstrap sass,某些变量不会被覆盖

在JS库中使用事件,而不会被覆盖

左填充在溢出时被覆盖吗?

提示警告-避免直接更改道具,因为每当父组件重新渲染时,该值就会被覆盖

将按钮添加到 xml 文件时,使用自定义适配器的 ListView 会被覆盖

当格林尼治标准时间更改为BST时,带时间和日期标记的目录会被覆盖吗?

KeyStroke.getKeyStroke(int,int)修饰符会被覆盖吗?

为什么数组会被覆盖?

sftp get -r不会被覆盖

为什么提示会被覆盖?

Swift属性观察不会被覆盖

当我尝试从线程写入文件的每个块时,它会被覆盖

为什么在函数内部创建同名变量时函数参数不会被覆盖?

PHP-每次我保存文件时,旧数据都会被覆盖

取消引用向量以设置值时,整个向量都会被覆盖

我有一个问题,当我放多个 url 时,数据会被覆盖

更改一条记录时,关联的记录会被覆盖