You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决使用Echarts的onEvents时报错:Cannot read property 'getDisplayList' of null

问题解决方法

根因说明

  • 代码存在语法错误:useMemo 调用的结尾符号错误,将闭合括号写成了大括号,直接触发编译报错
  • 类型定义不匹配:自行定义的ParamsInterface和Echarts官方datazoom事件的回调参数类型不一致,会触发TS类型校验报错
  • 潜在闭包陷阱:useMemo依赖数组为空时,如果后续回调逻辑用到其他外部状态,会始终读取到初始化时的旧值

修复后的完整代码

import { useMemo, useState } from 'react';
// 引入Echarts官方的事件类型定义
import type { ECElementEvent } from 'echarts';
import EChartsReact from 'echarts-for-react';

interface TimeRange {
    start: number;
    end: number;
}

// 此处替换为你自己的Echarts配置逻辑
const option = {};

const DemoComponent = () => {
    const [time, setTime] = useState<TimeRange>({start: 0, end: 100});

    const onEvents = useMemo(
        () => ({
            dataZoom: (params: ECElementEvent & {start: number; end: number}) => {
                const newTime: TimeRange = {
                    start: params.start,
                    end: params.end,
                };
                setTime(newTime);
            }
        }),
        // setState函数引用天生稳定,不需要加入依赖数组,如有其他用到的外部变量请在此处补充
        []
    );

    return <EChartsReact option={option} onEvents={onEvents} />
};

export default DemoComponent;

额外注意事项

  • 如果不需要刻意缓存onEvents对象来避免Echarts重渲染,也可以直接在组件内定义onEvents对象传入组件,无需包裹useMemo
  • 如果频繁触发dataZoom事件导致页面渲染卡顿,可以给setTime加上节流逻辑,降低状态更新频率

内容的提问来源于stack exchange,提问作者quacks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:36:05