@uiw/react-amap-map
Version:
基于 React 封装的高德地图组件。AMap Component Based On React.
80 lines (78 loc) • 2.76 kB
JavaScript
import _objectDestructuringEmpty from "@babel/runtime/helpers/objectDestructuringEmpty";
import _extends from "@babel/runtime/helpers/extends";
import { useState, useMemo, useEffect, useContext } from 'react';
import { useSetStatus, useEventProperties, useSettingProperties } from '@uiw/react-amap-utils';
import { Context } from './context';
/**
* 此类型是 `<Map>` 组件传递给子组件(如 `<Marker>`)的两个 props
*/
export var useMap = function useMap(props) {
if (props === void 0) {
props = {};
}
var other = _extends({}, (_objectDestructuringEmpty(props), props));
var [map, setMap] = useState();
var [zoom, setZoom] = useState(props.zoom || 15);
var [container, setContainer] = useState(props.container);
var {
dispatch
} = useContext(Context);
useEffect(() => {
if (container && !map && AMap) {
container.className = container.className + ' react-amap-wapper';
var instance = new AMap.Map(container, _extends({
zoom
}, other));
setMap(instance);
}
return () => {
if (map) {
map.clearInfoWindow();
map.clearLimitBounds();
map.clearMap();
map.destroy();
setMap(undefined);
}
};
}, [container, map]);
useEffect(() => {
if (map && container) {
dispatch({
map,
container,
AMap
});
}
return () => {
dispatch({
map: undefined,
container: undefined,
AMap: undefined
});
};
}, [map, container]);
useMemo(() => {
if (map && typeof props.zoom === 'number' && zoom !== props.zoom && props.zoom >= 2 && props.zoom <= 20) {
setZoom(props.zoom);
map.setZoom(props.zoom);
}
}, [zoom, props.zoom]);
useMemo(() => {
if (props.center && map) {
map.setCenter(props.center);
}
}, [map, props.center]);
useSetStatus(map, props, ['dragEnable', 'zoomEnable', 'jogEnable', 'pitchEnable', 'rotateEnable', 'animateEnable', 'keyboardEnable']);
// setStatus, setZoomAndCenter, setFitView
// 'Center',
useSettingProperties(map, props, ['Zoom', 'LabelzIndex', 'Layers', 'City', 'Bounds', 'LimitBounds', 'Lang', 'Rotation', 'DefaultCursor', 'MapStyle', 'Features', 'DefaultLayer', 'Pitch']);
useEventProperties(map, props, ['onMouseMove', 'onZoomChange', 'onMapMove', 'onMouseWheel', 'onZoomStart', 'onMouseOver', 'onMouseOut', 'onDblClick', 'onClick', 'onZoomEnd', 'onMoveEnd', 'onMouseUp', 'onMouseDown', 'onRightClick', 'onMoveStart', 'onDragStart', 'onDragging', 'onDragEnd', 'onHotspotOut', 'onHotspotOver', 'onTouchStart', 'onComplete', 'onHotspotClick', 'onTouchMove', 'onTouchEnd', 'onResize']);
return {
map,
setMap,
zoom,
setZoom,
container,
setContainer
};
};