Apexcharts - ReactJs - 实时 - 无法读取未定义的 属性 'filter'

Apexcharts - ReactJs - real time - Cannot read property 'filter' of undefined

我在合成器(挂钩)中创建了一个图表:

return (
<div id="chart-candlestick">
    <ReactApexChart options={optionsCandles} series={seriesCandles} type="candlestick"
                    height={290}/>
</div>)

我尝试添加值来测试实时可能性。 (没有它,它工作正常!) 我的问题是我试了好几个小时都没找到为什么会出现这个异常。

所以,我在选项中命名了我的图表(“蜡烛”):

{
    chart: {
        type: 'candlestick',
        height: 290,
        id: 'candles'   
        {...}
    },
    {...}
}

因此,我不时尝试使用 ApexCharts 的 exec 方法手动添加更多数据:

function fetchLastDatas() { 
    const date = dateAdd(candleDatas[candleDatas.length - 1].x,"minute",5)
    var obj = {
        x: date,
        y: candleDatas[candleDatas.length - 1].y
    }
    candleDatas.push(obj);

    ApexCharts.exec('candles', 'updateSeries', [{
        data:candleDatas
    }], true)

}

我的数组有数据,但我在“ApexCharts.exec”行有这个异常,我不知道为什么:

Uncaught TypeError: Cannot read property 'filter' of undefined
    at Function.value (apexcharts.common.js:14)
    at Function.value (apexcharts.common.js:14)
    at fetchLastDatas (ChartCaneva.js:178)
    

我是这个库的新手(通常在 React 中)所以感谢您的帮助!

晚安(或早安)!

运行 前阵子出现类似错误。

似乎 ApexCharts.exec 正在抱怨,因为它正在尝试更新尚未安装的组件 (带有 id='candles' 的图表)

您可以尝试在更新函数中添加一个 console.log(document.getElementById('chart-candlestick')) 来检查这一点。

也许可以尝试添加一个条件,在尝试 运行 任何更新之前检查组件是否已安装。

useRef?


function fetchLastDatas(chartIsMounted) {
  // ...
  // debug: console.log(document.getElementById('chart-candlesticks'));
  if(chartIsMounted !== null) {
    ApexCharts.exec('candles', 'updateSeries', [{ /* ... */}])
  }
}

function Parent() {
  let chartRef = React.useRef(null);

  React.useEffect(() => {
    fetchLastDatas(chartRef.current);
  }, []);

  return <Child chartRef={chartRef} /> // You could use React.forwardRef instead and pass a `ref` prop
}

function Child({ chartRef }) {
  return <ChartContainer chartRef={chartRef} />;
}

function ChartContainer({ chartRef }) {
  return (
    <div id="chart-candlestick">
      <ReactApexChart id='candles' ref={chartRef} />
    </div>
  );
}

抱歉,我还有很多其他问题,所以我没有回复这个问题。 在 React 中你通常不需要使用 exec。 Hooks的修改会自动执行更改。

我需要更改我的解决方案。

在 React 和 Apex-chart 中,仅当您设置对象的另一个引用时,图表才会刷新选项。就我而言,我尝试使用传播运算符和 Object.assign.

问题是图表的选项是一个复杂的对象。 所以你需要用库或自定义函数做一个深拷贝(为了性能,我读过“rfdc”是最好的)

我已经解决了这个问题 我导入了 import ReactApexChart from 'react-apexcharts'import ApexCharts from 'apexcharts'doc

完全一样

然后我的字符是 brush-chart 所以我为这两个部分调用了 ApexCharts.exec,如下所示

   ApexCharts.exec(`linechart`, 'updateSeries', [{data: this.state.graphData, }])

   ApexCharts.exec(`area-chart`, 'updateSeries', [{ data: this.state.graphData, }])