tooltip: {
//......
formatter: function (params: any) {
setTimeout(() => {
const root = document.getElementById('tool-tip')
if(root) {
ReactDOM.render(
<div>{ params.data.name } : { params.data.value } </div>,
root
)
}
}, 0)
return '<div id="tool-tip"></div>'
}
},
// ...
原理很简单,就是调用ReactDOM.render
去渲染jsx
,这里稍微要注意下获取root
的时机,因为只有formatter
被echarts
调用后才会被渲染,所以我们将react
的渲染时机放在了下一个宏任务中,这样就能确保可以获取到root
元素。
这个方法并不能保证react
或者echarts
的所有特性都能实现:
- 比如设置
tooltip
位置,不能用position
回调,因为这里用了setTimeout
来渲染节点,所以在position
回调里面无法获取到渲染后的dom
宽高, 当然可以提前写死。
我的解决方法是用css
定位
比如这样
transform: translate(-55%, -170%);