使用echarts时数据更新,图表不更新

如果使用了插件echarts-for-react,需要添加属性notMerge={true},代码如下

import ReactEcharts from "echarts-for-react";

<ReactEcharts
  notMerge={true}
  option={option}
/>

notMerge默认为false,即默认合并数据,设置成true之后就不合并数据,从而实现刷新页面UI的效果。

如果使用获取id元素setOption的方式需要传入第二个参数true,代码如下

const chartDom = document.getElementById("设置的id");
const myChart = echarts.init(chartDom);
const option = {...}
myChart.setOption(option, true)

参数说明(以下说明为echarts官方说明在此拿来借用,如有侵权务必联系删除)
chart.setOption(option, notMerge, lazyUpdate);

  • option: ECOption

    图表的配置项和数据,具体见配置项手册

  • opts

    • notMerge 可选。是否不跟之前设置的 option 进行合并。默认为 false。即表示合并。合并的规则,详见 组件合并模式。如果为 true,表示所有组件都会被删除,然后根据新 option 创建所有新组件。
    • replaceMerge 可选。用户可以在这里指定一个或多个组件,如:xAxis, series,这些指定的组件会进行 "replaceMerge"。如果用户想删除部分组件,也可使用 "replaceMerge"。详见 组件合并模式
    • lazyUpdate 可选。在设置完 option 后是否不立即更新图表,默认为 false,即同步立即更新。如果为 true,则会在下一个 animation frame 中,才更新图表。
    • silent 可选。阻止调用 setOption 时抛出事件,默认为 false,即抛出事件。

组件合并模式

对于一种类型的组件(如:xAxis, series):

  • 如果设置opts.notMergetrue,那么旧的组件会被完全移除,新的组件会根据option创建。
  • 如果设置opts.notMergefalse,或者没有设置 opts.notMerge
    • 如果在opts.replaceMerge里指定组件类型,这类组件会进行替换合并
    • 否则,会进行普通合并

什么是普通合并替换合并

普通合并

对于一种类型的组件(如:xAxis, series),新来的 option 中的每个“组件描述”(如:{type: 'xAxis', id: 'xx', name: 'kk', ...})会被尽量合并到已存在的组件中。剩余的情况,会在组件列表尾部创建新的组件。整体规则细节如下:

  • 先依次对 option 中每个有声明 id 或者 name 的“组件描述”,寻找能匹配其 id 或者 name 的已有的组件,找到的话则合并。
  • 再依次对 option 中剩余的“组件描述”,寻找还未执行过前一条的已有组件,找到的话则合并。
  • 其他 option 中剩余的“组件描述”,用于在组件列表尾部创建新组件。

特点:

  • 永远不会删除已存在的组件。也就是说,只支持增加,或者更新组件。
  • 组件的索引(componentIndex)永远不会改变。
  • 如果 idname 没有在 option 中被指定(这是经常出现的情况),组件会按照它在 option 中的顺序一一合并到已有组件中。这种设定比较符合直觉。

例子:

// 已有组件:
{
    xAxis: [
        { id: 'm', interval: 5 },
        { id: 'n', name: 'nnn', interval: 6 }
        { id: 'q', interval: 7 }
    ]
}
// 新来的 option :
chart.setOption({
    xAxis: [
        // id 没有指定。会寻找到第一个没有进行过合并的已有组件,进行合并。
        // 即合并到 `id: 'q'`。
        { interval: 77 },
        // id 没有指定。最终会创建新组件。
        { interval: 88 },
        // id 没有指定,但是 name 指定了。会被合并到已有的 `name: 'nnn'` 组件。
        { name: 'nnn', interval: 66 },
        // id 指定了,会被合并到已有的 `id: 'm'` 组件。
        { id: 'm', interval: 55 }
    ]
});
// 结果组件:
{
    xAxis: [
        { id: 'm', interval: 55 },
        { id: 'n', name: 'nnn', interval: 66 },
        { id: 'q', interval: 77 },
        { interval: 88 }
    ]
}

替换合并

对于一种类型的组件(如:xAxis, series),只有 option 中指定了 id 并且已有组件中有此 id 时,已有组件会和 option 相应组件描述进行合并。否则,已有组件都会删除,新组件会被根据 option 创建。细节规则如下:

  • 先依次对 option 中每个有声明 id 的“组件描述”,寻找能匹配其 id 或者 name 的已有的组件,找到的话则合并。
  • 删除其他没匹配到的已有组件。
  • 依次对 option 中剩余的“组件描述”,创建新组件,填入刚因删除而空出来的位置上,或者增加到末尾。

特点:

  • 普通合并 相比,支持了组件删除。
  • 已有组件的索引永远不会变。这是为了保证,option 或者 API 中的 index 引用(例如:xAxisIndex: 2)仍能正常一致得使用。
  • 整个处理过程结束后,可能存在一些“洞”,也就是说,在组件列表中的某些 index 上,并没有组件存在(被删除了)。但是这是可以被开发者预期和控制的。

例子:

// 已有组件:
{
    xAxis: [
        { id: 'm', interval: 5, min: 1000 },
        { id: 'n', name: 'nnn', interval: 6, min: 1000 }
        { id: 'q', interval: 7, min: 1000 }
    ]
}
// 新来的 option :
chart.setOption({
    xAxis: [
        { interval: 111 },
        // id 已经指定了。因此会被合并进已有的组件 `id: 'q'`。
        { id: 'q', interval: 77 },
        // id 已经指定了。但是已有组件没有此 id 。
        { id: 't', interval: 222 },
        { interval: 333 }
    ]
}, { replaceMerge: 'xAxis' });
// 结果组件:
{
    xAxis: [
        // 原来的 id 为 'm' 的组件,被移除。
        // 替换为新的组件。新组件中,并没有原来的 `min: 1000` 了。
        { interval: 111 },
        // 原来的 id 为 'n' 的组件,被移除。
        // 替换为新的组件。新组件中,并没有原来的 `min: 1000` 了。
        { id: 't', interval: 222 },
        // 原来的组件没有被移除,而是和 option 中的组件描述进行了合并。
        // 所以 `min: 1000` 被保留了。
        { id: 'q', interval: 77, min: 1000 },
        // 新添加的组件。
        { interval: 333 }
    ]
}

删除组件

有两种方法能删除组件:

  • 删除所有:使用 notMerge: true,则所有组件都被删除。
  • 删除部分:使用 replaceMerge: [...],被指定的组件类型,会根据 replaceMerge 的规则:如果 id 匹配就合并( merge ),否则旧组件被删除,新组件被创建。“部分删除” 有助于,在删除该删除的组件时,保留其他组件的状态(如高亮、动画、选中状态)。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容