Vue 3 的hooks,实现了 ECharts 折线图实例的初始化、重置大小和销毁等功能。

https://echarts.apache.org/examples/zh/editor.html?c=line-stack数据参考官网
引入了 ECharts 库和 Vue 3 中的一些 Hooks 和方法。
定义了一个名为 useEcharts 的自定义 Hook,用来管理 ECharts 实例的初始化、更新和销毁。
在 useEcharts 中,利用 Vue 3 的生命周期钩子函数和响应式数据,实现了 ECharts 实例的初始化、重置大小和销毁等功能。
最后通过 return 返回了一些可以在组件中使用的属性和方法,包括 chartRef、state 对象的响应式属性、以及 echartsResizeFun 方法。

import * as echarts from 'echarts';
import { ref, reactive, toRefs, onMounted, onBeforeUnmount, onActivated, watch, nextTick } from 'vue';

function useEcharts(params) {
    const { props, option } = params;
    const chartRef = ref();
    
    const state = reactive({
        chart: null,
        nvll: ['', null, undefined],
    });

    onMounted(() => {
        window.addEventListener('resize', echartsResizeFun);
    });

    onActivated(() => {
        echartsResizeFun();
    });
    // 监听初始化
    watch(() => [props.data, props.theme], () => {
        nextTick(() => {
            initChart();
        });
    }, { deep: true, immediate: true });

    function initChart() {
        if (state.nvll.indexOf(state.chart) === -1) state.chart.dispose();
         // 获取实例时,记得使用markRaw返回实例本身
        // 参数1:容器ref值,参数2:主题
        state.chart = markRaw(echarts.init(chartRef.value, props.theme));
        
        state.chart.setOption(option);
    }
    // 重置大小
    function echartsResizeFun() {
        state.chart && state.chart.resize();
    }

    onBeforeUnmount(() => {
        window.removeEventListener('resize', echartsResizeFun);
        if (state.chart) {
            state.chart.dispose();
            state.chart = null;
        }
    });

    return {
        chartRef,
        ...toRefs(state),
        echartsResizeFun,
    };
}

export default useEcharts; // import useEcharts from '@/src/hooks/useEcharts';
export { useEcharts }; // import {useEcharts} from '@/src/hooks/useEcharts';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值