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%);