|
1 | | -import React, { memo, useContext, useEffect, useState } from 'react' |
2 | | -import atlas from 'azure-maps-control' |
| 1 | +import React, { memo, useContext, useEffect, useState, useRef } from 'react' |
| 2 | +import atlas, { Map } from 'azure-maps-control' |
3 | 3 | import { IAzureMap, IAzureMapsContextProps, MapType } from '../../types' |
4 | 4 | import { AzureMapsContext } from '../../contexts/AzureMapContext' |
5 | 5 | import { Guid } from 'guid-typescript' |
@@ -27,10 +27,15 @@ const AzureMap = memo( |
27 | 27 | styleOptions, |
28 | 28 | serviceOptions |
29 | 29 | }: IAzureMap) => { |
30 | | - const { setMapRef, removeMapRef, mapRef, setMapReady, isMapReady } = useContext< |
31 | | - IAzureMapsContextProps |
32 | | - >(AzureMapsContext) |
| 30 | + const { |
| 31 | + setMapRef, |
| 32 | + removeMapRef, |
| 33 | + mapRef, |
| 34 | + setMapReady, |
| 35 | + isMapReady |
| 36 | + } = useContext<IAzureMapsContextProps>(AzureMapsContext) |
33 | 37 | const [mapId] = useState(providedMapId || Guid.create().toString()) |
| 38 | + const mapRefSource = useRef<Map | null>(null) |
34 | 39 | useEffect(() => { |
35 | 40 | if (mapRef) { |
36 | 41 | mapRef.setTraffic(trafficOptions) |
@@ -61,7 +66,7 @@ const AzureMap = memo( |
61 | 66 | } |
62 | 67 | }, [serviceOptions]) |
63 | 68 |
|
64 | | - useCheckRef<MapType, MapType>(mapRef, mapRef, mref => { |
| 69 | + useCheckRef<MapType, MapType>(mapRef, mapRef, (mref) => { |
65 | 70 | mref.events.add('ready', () => { |
66 | 71 | if (imageSprites) { |
67 | 72 | createImageSprites(mref, imageSprites) |
@@ -95,7 +100,10 @@ const AzureMap = memo( |
95 | 100 | }) |
96 | 101 |
|
97 | 102 | useEffect(() => { |
98 | | - setMapRef(new atlas.Map(mapId, options)) |
| 103 | + if (mapRefSource.current === null) { |
| 104 | + mapRefSource.current = new atlas.Map(mapId, options) |
| 105 | + } |
| 106 | + setMapRef(mapRefSource.current) |
99 | 107 | return () => { |
100 | 108 | removeMapRef() |
101 | 109 | } |
|
0 commit comments