我需要highcharts调整其宽度以适应父级的宽度。因此,如果我们改变父级的宽度而不改变数据,图表应该调整大小。但由于数据是相同的,所以不会发生这种情况。
如果我们调整浏览器屏幕的大小,它似乎可以工作,但这不是我们所需要的。
import React, { useState } from 'react';
import { render } from 'react-dom';
import HighchartsReact from 'highcharts-react-official';
import Highcharts from 'highcharts';
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1) + min);
}
const LineChart = () => {
const [width, setWidth] = useState(null);
const [chartOptions, setChartOptions] = useState({
xAxis: {
categories: ['A', 'B', 'C'],
},
series: [{ data: [1, 2, 3] }],
});
const handleWidth = () => {
const w = getRandomIntInclusive(100, 500);
setWidth(w);
};
return (
<div style={{ width }}>
<HighchartsReact highcharts={Highcharts} options={chartOptions} />
<button onClick={handleWidth}>change container width</button>
</div>
);
};
render(<LineChart />, document.getElementById('root'));
下面是一个指向“不工作”示例的链接:https://stackblitz.com/edit/react-xhcmx4?file=index.js
2条答案
按热度按时间ne5o7dgx1#
来自Highcharts API:
回流([e])
将图表重排至其容器。根据预设,图表会在window.resize事件之后自动重排至其容器,如同chart.reflow选项。不过,div resize没有可靠的事件,因此如果在没有window resize事件的情况下调整容器大小,则必须明确呼叫此事件。
作为解决方案,在
width
更改后调用reflow
方法。实时演示:https://stackblitz.com/edit/react-zydh8m?file=index.js
**API参考:**api.highcharts.com/class-reference/Highcharts.Chart#reflow
bvjxkvbb2#
如果由于某种原因无法使用ppotaczek中的
.reflow
解决方案,则可以在调整容器div大小时向window对象发送resize事件。HighCharts侦听该事件,然后重新绘制自身。