@uiw/react-amap-map
Version:
基于 React 封装的高德地图组件。AMap Component Based On React.
94 lines (92 loc) • 3.89 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useMap = void 0;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _objectDestructuringEmpty2 = _interopRequireDefault(require("@babel/runtime/helpers/objectDestructuringEmpty"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _react = require("react");
var _reactAmapUtils = require("@uiw/react-amap-utils");
var _context = require("./context");
/**
* 此类型是 `<Map>` 组件传递给子组件(如 `<Marker>`)的两个 props
*/
var useMap = exports.useMap = function useMap() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var other = (0, _extends2["default"])({}, ((0, _objectDestructuringEmpty2["default"])(props), props));
var _useState = (0, _react.useState)(),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
map = _useState2[0],
setMap = _useState2[1];
var _useState3 = (0, _react.useState)(props.zoom || 15),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
zoom = _useState4[0],
setZoom = _useState4[1];
var _useState5 = (0, _react.useState)(props.container),
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
container = _useState6[0],
setContainer = _useState6[1];
var _useContext = (0, _react.useContext)(_context.Context),
dispatch = _useContext.dispatch;
(0, _react.useEffect)(function () {
if (container && !map && AMap) {
container.className = container.className + ' react-amap-wapper';
var instance = new AMap.Map(container, (0, _objectSpread2["default"])({
zoom: zoom
}, other));
setMap(instance);
}
return function () {
if (map) {
map.clearInfoWindow();
map.clearLimitBounds();
map.clearMap();
map.destroy();
setMap(undefined);
}
};
}, [container, map]);
(0, _react.useEffect)(function () {
if (map && container) {
dispatch({
map: map,
container: container,
AMap: AMap
});
}
return function () {
dispatch({
map: undefined,
container: undefined,
AMap: undefined
});
};
}, [map, container]);
(0, _react.useMemo)(function () {
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]);
(0, _react.useMemo)(function () {
if (props.center && map) {
map.setCenter(props.center);
}
}, [map, props.center]);
(0, _reactAmapUtils.useSetStatus)(map, props, ['dragEnable', 'zoomEnable', 'jogEnable', 'pitchEnable', 'rotateEnable', 'animateEnable', 'keyboardEnable']);
// setStatus, setZoomAndCenter, setFitView
// 'Center',
(0, _reactAmapUtils.useSettingProperties)(map, props, ['Zoom', 'LabelzIndex', 'Layers', 'City', 'Bounds', 'LimitBounds', 'Lang', 'Rotation', 'DefaultCursor', 'MapStyle', 'Features', 'DefaultLayer', 'Pitch']);
(0, _reactAmapUtils.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: map,
setMap: setMap,
zoom: zoom,
setZoom: setZoom,
container: container,
setContainer: setContainer
};
};