highcharts和setChartOptions中的series.setData在ReactJS中不起作用

4c8rllxm  于 2023-10-20  发布在  Highcharts
关注(0)|答案(1)|浏览(212)

现在,正如我之前讨论过的散点图(Inconsistent Data Points in HighCharts Scatter Plot with ReactJS)的问题,我们不能像HighCharts中的其他类型一样直接使用setState方法更新数据。
所以,我需要更新数据使用参考只(在散点图)。

我的场景:

我从父组件中获取最小值和最大值,并将XAxis中的最小值和最大值传递给负责显示绘图的子组件。

问题:

=>当组件首次挂载时- chartOptions被初始化,其中序列数据为空(因为maindata为空)。现在,useEffect运行并调用一个API,它将获取数据,我将使用ref方法将数据传递到highcharts中,如下所示.

  1. useEffect(() => {
  2. const chart = chartRef.current.chart;
  3. if (chart) {
  4. chart.series[0].setData(mainData, true, true, false);
  5. }
  6. }, [data]);

现在,当用户点击刷新图标-我将再次获取数据,我可以使用上述方法更新系列数据。但是,为了在XAxis中设置最小值和最大值-我必须这样做(我需要再次设置它,因为我想将范围选择器放置在相同的范围内):

  1. useEffect(() => {
  2. setChartOptions((prevState) => ({
  3. ...prevState,
  4. xAxis: [
  5. {
  6. ...prevState.xAxis[0],
  7. min: xMax.maxX - 50,
  8. max: xMax.maxX,
  9. },
  10. ],
  11. }));
  12. }, [data]);

重现问题步骤:

=>第一次绘图是不来作为数据是空的,比数据来自API,这将被设置使用ref,所以现在数据不是空的,我们可以看到图.
然后,setChartOptions将运行,它只会改变最小值和最大值,并保持其他内容与以前相同,因此数据将再次为空,因为它默认为空(mainData第一次为空)。
所以,情节消失了,可以看到只是空白的白色屏幕.

期望值:

=>我认为,我们可以这样解决这个问题:
无论如何,我们可以先设置一个机制来运行setChartOptions,这样就设置了min和max,只有than和than,我们将使用ref(chart.series[0].setData(mainData,true,true,false);):

到目前为止,我已经尝试过:

=>简单来说,我们可以通过set方法直接设置Series数据,如下所示:

  1. setChartOptions((prevState) => ({
  2. ...prevState,
  3. series: [
  4. {
  5. ...prevState.series[0],
  6. data: mainData, // Update with the fetched data
  7. },
  8. ],
  9. xAxis: [
  10. {
  11. ...prevState.xAxis[0],
  12. min: xMax.maxX - 50,
  13. max: xMax.maxX,
  14. },
  15. ],
  16. }));

但是,这不是散点图中的工作案例(Highcharts BUG
但是,我不知道如何用ReactJS解决这个问题。
实际上,我无法创建演示代码,因为数据来自API,但您可以将此代码作为引用,其中我使用ref更新数据:
https://stackblitz.com/edit/react-9wsnd9?file=index.js

更新:

嘿,谢谢你的快速回复,但我仍然无法解决我的问题:
代码如下:https://stackblitz.com/edit/react-sgkrzf?file=index.js

**解释:**From parent -我将min={20}和max={40}传递给子组件。
**预期行为:**默认情况下,最小值和最大值应同时应用(两者一起应用),但两者不同时工作(如果最小值应用,则最大值不适用,如果最大值忽略,则最小值忽略)

我想最初应用最小和最大分别为20和40,比用户可以改变范围选择器和刷新,应保留更改后的值。
即=>在刷新数据(我的意思是说调用API)后,将范围选择器(20,40)更改为(34,75)应保留为(34,75)
如何做到这一点?请修改上面的代码,并帮助我与相同的。
先谢了。

nhaq1z21

nhaq1z211#

您可以在不使用prev state的情况下使用setChartOptions(旧选项不会被删除)。

  1. useEffect(() => {
  2. setChartOptions(() => ({
  3. xAxis: [
  4. {
  5. min: xMax.maxX - 50,
  6. max: xMax.maxX
  7. }
  8. ]
  9. }));
  10. }, [data]);

**网址:**https:github.com/highcharts/highcharts-react#optimal-way-to-update

或者直接在图表上操作(类似于setData)并设置xAxis极值或更新最小值/最大值。

**API引用:**https:api.highcharts.com/class-reference/Highcharts.Axis#setExtremes

展开查看全部

相关问题