antv L7地图报错:context lost at Funciton

在这里插入图片描述

某天疯狂渲染地图组件,大概17次来回切换,屏幕重新渲染地图,最终它还是没能扛下所有,不幸崩塌。

分析可能的原因:

1、由于L7地图画布一直累加在页面上,old context 无法回溯更新,“新的来了,旧的依旧不去”,最后导致画布丢失。

解决方案:重新渲染新的地图画布之前,将上一次画布销毁,直接用的destroy()方法。

结果:重新渲染的时候看着是很丝滑,看上去旧的画布已经销毁不复还,再次试验发现10余次渲染之后又爆红报错了。

2、查看dom节点,发现地图组件是销毁了,它的底图(图上白色背景的)依旧保留,无数个canvas节点堆积如山。

解决方案:通过官方提供的destory()没办法解决这个bug,只能换一种思路。每次重新渲染地图画布,无非是想把新的数据灌进去再进行渲染,那我们就只画一个地图画布,接下来的操作,只更新数据,不更新画布。

updateData(layer: DRILL_LEVEL, newData: Array<{
[key: string]: any;
}>, joinByField?: [string, string]): void;

核心代码 : updateData()

import React, {
    useEffect, useState } from 'react';

import {
    Scene, Control } from '@antv/l7';
import {
    DrillDownLayer } from '@antv/l7-district';
import {
    Mapbox } from '@antv/l7-maps';
import {
    getAccountMapList } from '../../../../../services/map/api';
import moment from 'moment';
import '../index.css';
import {
    format } from '../../utils';
import {
    Spin } from 'antd';

let drillLayer: DrillDownLayer;
interface MapProps {
   
  selectTime: any;
  isDay: any;
}
const Map: React.FC<MapProps> = (props: any) => {
   
  const {
    selectTime, isDay } = props;
  const [loading, setLoading] = useState(false);

  let areaName = '' as any;
  let provinceData = [] as any;
  let cityDatas = [] as any;

  useEffect(() => {
   
    const scene = new Scene({
   
      id: 'mapWarning',
      map: new Mapbox({
   
        center: [116.2825, 39.9],
        pitch: 0,
        style: 'blank',
        zoom: 3,
        
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椰卤工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值