- 首先按需引入模块
1 2 3 4 5 6 7 | // 引入 ECharts 主模块 import echarts from 'echarts/lib/echarts'; // // 引入提示框和标题组件 import 'echarts/lib/component/tooltip'; import 'echarts/lib/component/title'; import 'echarts/lib/component/legend' import 'echarts/lib/chart/pie'; |
- 设置echarts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | const Model_echarts = (props) => {<!-- --> let [main , setMain] = useState('') const handleOk = () => {<!-- --> props.dispatch({<!-- --> type: 'CHANGE_MODEL_VISIBLE', payload: [] }) }; const option = {<!-- --> title: {<!-- --> text: '某站点用户访问来源', subtext: '纯属虚构', left: 'center' }, tooltip: {<!-- --> trigger: 'item', formatter: '{a} <br/>{b} : {c} ({d}%)' }, legend: {<!-- --> orient: 'vertical', left: 'left', data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎'] }, series: [ {<!-- --> name: '访问来源', type: 'pie', radius: '55%', center: ['50%', '60%'], data: [ {<!-- --> value: 335, name: '直接访问' }, {<!-- --> value: 310, name: '邮件营销' }, {<!-- --> value: 234, name: '联盟广告' }, {<!-- --> value: 135, name: '视频广告' }, {<!-- --> value: 1548, name: '搜索引擎' } ], emphasis: {<!-- --> itemStyle: {<!-- --> shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ] }; useEffect(()=>{<!-- --> var node = document.getElementById('main') setMain(node) } , []) // 基于准备好的dom,初始化echarts实例 if(main !== ""){<!-- --> var myChart = echarts.init(main); myChart.resize({<!-- --> height: '400px' }) myChart.setOption(option); } // 绘制图表 return ( <Modal title={<!-- -->props.model_payload.title1} visible={<!-- -->props.model_visible} onCancel = {<!-- -->handleOk} width = {<!-- -->800} footer = {<!-- --><Button type = {<!-- -->"primary"} onClick = {<!-- -->handleOk}>确定</Button>} > <div id="main"></div> </Modal> ) } |
因为是在函数式组件中,并没有生命周期函数,所以我用了useEffect钩子函数来获取元素节点,在这里要注意,一开始是并不能获取到节点的,所以在这里要设置判断条件。但是最后我遇到了一个问题,在检查元素中能查看到元素节点,但是并没有高度,这里要设置一个属性