react hooks使用Echarts图表中遇到的情况及相关配置问题

 更新时间:2024年03月14日 08:56:24   作者:小刘加油!  
这篇文章主要介绍了react hooks使用Echarts图表中遇到的情况及相关配置问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前言

项目开发中,需要做一个报表功能,看了下UI图,初步定下使用 echarts,不过之前使用 echarts 都是在 Vue2Vue3 框架下开发,第一次使用 react-hooks 开发 echarts,将流程及一些 相关配置 写个随笔记录下。

1、 下载 echarts 包

npm install echarts --save

2、引入eaharts

import * as echarts from 'echarts' // 引入 echarts 核心模块

注意:

  • 上面的引入写法是 echarts V5版本的写法,因为下载默认下载 V5版本
  • 如果需要按需引入,请参考echarts 官网

效果图如下所示:

3、使用

import * as echarts from 'echarts' // 引入 echarts 核心模块

const index = () => {
	const initChart = () => {
		let chartDom: any = document.getElementById('chart')
        let myChart = echarts.init(chartDom)
        myChart.clear()
        let option:any = null
        option = {
            tooltip: {
                trigger: 'axis',
                axisPointer: {
                    type: 'shadow'
                }
            },
            title: {
                show: true,
                text: '各厂手续办理数量总览',
                left: 10,
                top: 10,
            },
            dataZoom: [
                {
                    type: 'slider',  // slider 代表有滑块,inside 代表内置,左右滑动
                    id: 'dataZoomX',
                    start: 0, // 数据窗口范围的起始百分比。范围是:0 ~ 100。表示 0% ~ 100%。
                    show: true,  // 是否显示下方滚动条,默认为true
                    realtime: true,   // 是否实时更新
                    minValueSpan: 5,  // 显示数据的最小条数
                    maxValueSpan: 10,  //显示数据的最大条数
                    

                    fillerColor: "#CED4DD", //滑动块的颜色

                    xAxisIndex: [0],  // 表示这个 dataZoom 组件控制 第一个 xAxis
                    handleSize: 0, //滑动条的 左右2个滑动条的大小
                    height: 10, //组件高度
                    bottom: 0, // 控制滚动条距离底部的位置;
                    borderColor: "#FAFAFA",  // 边框颜色
                    
                    backgroundColor: "#FAFAFA", //两边未选中的滑动条区域的颜色
                    showDataShadow: false, //是否显示数据阴影 默认auto
                    showDetail: false, //即拖拽时候是否显示详细数值信息 默认true
                    filterMode: "filter",
                    brushSelect: false  // 滚动条上面的阴影
                }
            ],
            legend: {
                top: 10,
                right: 20
            },
            grid: {
                left: '3%',
                right: '4%',
                bottom: '3%',
                containLabel: true
            },
            xAxis: [
                {
                    type: 'category',
                    data: [], // 数组-数据
                    axisLabel: {
                        interval: 0,
                    },
                }
            ],
            yAxis: [
                {
                    type: 'value',
                    // splitNumber: 5   // Y轴坐标精度,默认为5
                }
            ],
            series: [
                {
                    name: '已完成',
                    type: 'bar',
                    stack: 'overlap',
                    label: {
                        show: true,
                        position: 'inside'
                    },
                    emphasis: {
                        focus: 'series'
                    },
                    data: [], 数组-数据
                    itemStyle: {
                        color: '#0194FE'
                    }
                },
                {
                    name: '办理中',
                    type: 'bar',
                    stack: 'overlap',
                    emphasis: {
                        focus: 'series'
                    },
                    label: {
                        show: true,
                        position: 'inside'
                    },
                    data: [], 数组-数据
                    itemStyle: {
                        color: '#5CDBD3'
                    }
                },
                {
                    name: '未办理',
                    type: 'bar',
                    stack: 'overlap',  // stack: 'Ad', 好像也有同样效果
                    emphasis: {
                        focus: 'series'
                    },
                    label: {
                        show: true,
                        position: 'inside'
                    },
                    data: [], 数组-数据
                    itemStyle: {
                        color: '#FFC53D'
                    }
                },
            ]
        };

        myChart.resize()
        option && myChart.setOption(option);

        // 这个点击事件只限制于 点击柱形中有数据的部分,没有数据的部分,点击无效
        myChart.on('click', function(params: any) {
            handleGetBottomList(params.name, params.seriesName)
        })
	}
	
	useEffect( () => {
		initChart()
	})

	return (
		<div id='chart'></div>
	)
}

相关参数配置

1. 形成堆叠柱状图

series 配置中,将每一个柱的对象,其中的 stack 参数,设置成一样的 ‘overlap’ / ‘Ad’

2. 设置右上方的表头的位置

3. 设置echarts 柱状图 横向滚动

4. X轴坐标 label 文字过长,无法显示

  • interval:间隔 每个坐标之间的间隔,正常显示设置 0 就可以了。
  • rotate:偏移,也可以说是倾斜。值是number类型,视情况而定。

如果使用了偏移,可能会出现新的问题,就是左右边距不够文字会被遮挡一部分,这时候可以进行如下配置。

grid: {
    left:"20%",   //grid 组件离容器左侧的距离
    right:"30px", //grid 组件离容器右侧的距离
    bottom:"20%"  //grid 组件离容器下边距的距离
}

5. 点击柱状图,调用方法

如果项目开发中有这样的需求:

点击某一个柱状图,调用接口获取柱状图的某些数据,可以进行这样操作:

 myChart.on('click', function(params: any) {
       // params 为柱状图的参数 
       // 如果是普通柱状图,使用 params.name (对应的x轴label) 参数
       // 如果是折叠柱状图,使用 params.name   params.seriesName (对应的属性)
       // 如果还需要什么参数,可以打印 params 查找
       console.log('params', params)
 })

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • React通过conetxt实现多组件传值功能

    React通过conetxt实现多组件传值功能

    Context 提供了一种在组件之间共享此类值的方式,而不必显式地通过组件树的逐层传递 props。本文给大家介绍React通过conetxt实现多组件传值功能,感兴趣的朋友一起看看吧
    2021-10-10
  • React父组件如何调用子组件的方法推荐

    React父组件如何调用子组件的方法推荐

    在React中,我们经常在子组件中调用父组件的方法,一般用props回调即可,这篇文章主要介绍了React父组件如何调用子组件的方法推荐,需要的朋友可以参考下
    2023-11-11
  • 详解webpack2+node+react+babel实现热加载(hmr)

    详解webpack2+node+react+babel实现热加载(hmr)

    这篇文章主要介绍了详解webpack2+node+react+babel实现热加载(hmr) ,非常具有实用价值,需要的朋友可以参考下
    2017-08-08
  • react中通过props实现父子组件间通信的使用示例

    react中通过props实现父子组件间通信的使用示例

    在React中,父组件可以通过props属性向子组件传递数据,子组件可以通过props属性接收父组件传递过来的数据,本文就来介绍一下如何实现,感兴趣的可以了解一下
    2023-10-10
  • React类组件中super()和super(props)的区别详解

    React类组件中super()和super(props)的区别详解

    这篇文章给大家详细介绍了React类组件中super()和super(props)有什么区别,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • react-router实现跳转传值的方法示例

    react-router实现跳转传值的方法示例

    这篇文章主要给大家介绍了关于react-router实现跳转传值的相关资料,文中给出了详细的示例代码,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-05-05
  • 在React中集成第三方库和插件方式

    在React中集成第三方库和插件方式

    本文详细介绍了如何在React项目中高效集成第三方库和插件,包括选择合适的库、封装为React组件、按需加载、避免直接操作DOM、处理库的更新和卸载、样式处理与主题定制、性能优化以及调试与维护等方面,通过遵循这些最佳实践,可以确保集成过程高效且优雅
    2025-03-03
  • React图片压缩上传统一处理方式

    React图片压缩上传统一处理方式

    这篇文章主要介绍了React图片压缩上传统一处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • React 正确使用useCallback useMemo的方式

    React 正确使用useCallback useMemo的方式

    这篇文章主要介绍了React 正确使用useCallback useMemo的方式,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • react无限滚动组件的实现示例

    react无限滚动组件的实现示例

    本文主要介绍了react无限滚动组件的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05

最新评论