React Highcharts - 如何从父组件使用 drillUp?
React Highcharts - how to use drillUp from parent component?
我正在尝试从父组件向上钻取
这是父组件:
<button onClick={() => {
drillUp();
}}></button>
<TreeMap dataLabel={dataLabel} height={blockHeight} />
在子组件中,我正在渲染 Highchart
<ReactHighcharts
highcharts={Highcharts}
options={treeConfig}
></ReactHighcharts>
这是我的树配置
const treeConfig = {
chart: {
height: height,
events: {
render() {
const elements = document.getElementsByClassName(
"highcharts-point highcharts-color-0 highcharts-internal-node-interactive",
);
const drillButton = document.getElementsByClassName(
"highcharts-drillup-button",
)[0];
if (drillButton && drillButton.id !== "drill") {
drillButton.setAttribute("id", "drill");
}
if (elements.length) {
const sortElements = [...elements].sort((a, b) => {
return a.width.baseVal.value * a.height.baseVal.value >
b.width.baseVal.value * b.height.baseVal.value
? -1
: 1;
});
sortElements.forEach((el, i) => {
el.style.setProperty("fill", colorPallete[i], "important");
el.setAttribute("fill", colorPallete[i]);
});
}
}
},
},
我找到了这个 post -> Manually Triggering drillup event, highcharts 但它在 jQuery 中,我试过了但没有用
如何在 React 中从父组件引发 drillUp 事件?
提前致谢!
好的,这比我想象的要复杂,因为文档很糟糕,但我能够在 stackblitz
上得到它 运行
为了能够在图表上手动或以编程方式调用事件,我们需要获取对图表对象的引用。要获取子组件的引用,我们可以这样做:
const Child = ({ setChart }) => {
...
const chartComponent = useRef(null);
useEffect(() => {
setChart(chartComponent.current.chart);
}, []);
highchartsDrillDown(Highcharts);
return (
<HighchartsReact
highcharts={Highcharts}
options={options}
ref={chartComponent}
/>
);
}
setChart
是来自父级的道具,用于在父级上设置图表对象
在父级上,您可以像这样手动调用下钻和上钻:
const Parent = () => {
const [chart, setChart] = useState(null);
const handleDrillUp = () => {
chart.drillUp();
};
const handleDrillDown = () => {
chart.series[0].data[0].doDrilldown(); // you can chose the series and data
};
return (
<div>
<button onClick={handleDrillUp}> drill up</button>
<button onClick={handleDrillDown}> drill down</button>
<Child setChart={setChart} />;
</div>
);
};
编辑:
之前的解决方案是针对 highcharts-react-official
库的。
刚刚注意到您使用的 highcharts 库与我使用的库不同,因此 react-highcharts
唯一的区别是:
const afterRender = (chart) => {setChart(chart)};
<ReactHighcharts config = {config} callback = {afterRender}>.
</ReactHighcharts>
唯一的区别是一个使用 useRef 钩子,另一个有回调 prop
我正在尝试从父组件向上钻取
这是父组件:
<button onClick={() => {
drillUp();
}}></button>
<TreeMap dataLabel={dataLabel} height={blockHeight} />
在子组件中,我正在渲染 Highchart
<ReactHighcharts
highcharts={Highcharts}
options={treeConfig}
></ReactHighcharts>
这是我的树配置
const treeConfig = {
chart: {
height: height,
events: {
render() {
const elements = document.getElementsByClassName(
"highcharts-point highcharts-color-0 highcharts-internal-node-interactive",
);
const drillButton = document.getElementsByClassName(
"highcharts-drillup-button",
)[0];
if (drillButton && drillButton.id !== "drill") {
drillButton.setAttribute("id", "drill");
}
if (elements.length) {
const sortElements = [...elements].sort((a, b) => {
return a.width.baseVal.value * a.height.baseVal.value >
b.width.baseVal.value * b.height.baseVal.value
? -1
: 1;
});
sortElements.forEach((el, i) => {
el.style.setProperty("fill", colorPallete[i], "important");
el.setAttribute("fill", colorPallete[i]);
});
}
}
},
},
我找到了这个 post -> Manually Triggering drillup event, highcharts 但它在 jQuery 中,我试过了但没有用
如何在 React 中从父组件引发 drillUp 事件?
提前致谢!
好的,这比我想象的要复杂,因为文档很糟糕,但我能够在 stackblitz
上得到它 运行为了能够在图表上手动或以编程方式调用事件,我们需要获取对图表对象的引用。要获取子组件的引用,我们可以这样做:
const Child = ({ setChart }) => {
...
const chartComponent = useRef(null);
useEffect(() => {
setChart(chartComponent.current.chart);
}, []);
highchartsDrillDown(Highcharts);
return (
<HighchartsReact
highcharts={Highcharts}
options={options}
ref={chartComponent}
/>
);
}
setChart
是来自父级的道具,用于在父级上设置图表对象
在父级上,您可以像这样手动调用下钻和上钻:
const Parent = () => {
const [chart, setChart] = useState(null);
const handleDrillUp = () => {
chart.drillUp();
};
const handleDrillDown = () => {
chart.series[0].data[0].doDrilldown(); // you can chose the series and data
};
return (
<div>
<button onClick={handleDrillUp}> drill up</button>
<button onClick={handleDrillDown}> drill down</button>
<Child setChart={setChart} />;
</div>
);
};
编辑:
之前的解决方案是针对 highcharts-react-official
库的。
刚刚注意到您使用的 highcharts 库与我使用的库不同,因此 react-highcharts
唯一的区别是:
const afterRender = (chart) => {setChart(chart)};
<ReactHighcharts config = {config} callback = {afterRender}>.
</ReactHighcharts>
唯一的区别是一个使用 useRef 钩子,另一个有回调 prop