reactjs - 如何在 Highcharts React 中重绘使用 SVGRenderer 渲染的文本?
问题描述
我正在使用 SVGRenderer 在圆环图的中心绘制总值,如下所示:
执行此操作的代码如下所示(请在此处查看 CodeSandbox )
export const PieChart = ({ title, totalLabel, pieSize, pieInnerSize, data }: PieChartProps) => {
const chartRef = useRef(null);
const [chartOptions, setChartOptions] = useState(initialOptions);
useEffect(() => {
// set options from props
setChartOptions({...});
// compute total
const total = data.reduce((accumulator, currentValue) => accumulator + currentValue.y, 0);
// render total
const totalElement = chart.renderer.text(total, 0, 0).add();
const totalElementBox = totalElement.getBBox();
// Place total
totalElement.translate(
chart.plotLeft + (chart.plotWidth - totalElementBox.width) / 2,
chart.plotTop + chart.plotHeight / 2
);
...
}, [title, totalLabel, pieSize, pieInnerSize, data]);
return (
<HighchartsReact
highcharts={Highcharts}
containerProps={{ style: { width: '100%', height: '100%' } }}
options={chartOptions}
ref={chartRef}
/>
);
};
但是这种方法有两个问题:
- 调整图表大小时,总数保持在原来的位置 - 因此它不再位于饼图中的中心。
- 当图表数据发生变化时(使用表格),新的总数会覆盖现有的总数。
我该如何解决这些问题?使用 React,我希望图表在调整大小或更改道具时完全重新渲染。然而,使用 Highcharts React,图表似乎保持内部状态,不会被新的道具覆盖。
解决方案
对于这种情况,我可以建议两种选择:
- 每次重绘后使用
events.render
回调,销毁并渲染一个新标签:
演示:https ://jsfiddle.net/BlackLabel/ps97bxkg/
events.render
在每次重绘后使用回调来翻译这些标签:
演示:https ://jsfiddle.net/BlackLabel/6kwag80z/
每次图表重绘后都会触发渲染回调,因此在这种情况下完全有用 - 更多信息 API:https ://api.highcharts.com/highcharts/chart.events.render
推荐阅读
- web - 单个 Web 应用程序中多种编程语言的实现模式
- macos - Flutter RawKeyboardListener triggering system sounds on MacOS
- ruby-on-rails - How to add filter_sensitive_data object in VCR Cassette JSON file?
- search - text: "intelligent" search and replace
- python - Python Selenium,Firefox 配置文件
- r - 如果布尔数据框在 R 中的位置为真,如何获取数字数据框值?
- angular - 为什么 ViewChild 在调用它的组件之外时未定义?
- java - 使用 ump / admob / 资金选择获得同意的问题
- python - 错误:导入 tensorflow.keras.backend 作为 K 无法解析 Pylance(reportMissingImports)
- javascript - 我在 Visual Studio 代码上使用 javascript 并试图 console.log 进入实时服务器,它不适合我