Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 1x 1x 2x 2x 2x 2x 2x 2x 2x | import { useState, useEffect, useMemo } from 'react'; import { useMapContext } from '@uiw/react-baidu-map-map'; import { requireScript } from '@uiw/react-baidu-map-utils'; import { useEnableProperties, useProperties, useVisiable, useEventProperties } from '@uiw/react-baidu-map-utils'; import { CurveLineProps } from '.'; export interface UseCurveLine extends CurveLineProps {} export function useCurveLine(props = {} as UseCurveLine) { const { strokeColor, strokeWeight, strokeOpacity, strokeStyle, enableMassClear, enableEditing = false, enableClicking, icons, } = props; const { map } = useMapContext(); const [curveLine, setCurveLine] = useState<BMapLib.CurveLine>(); const libSDK = window.BMapLib; const [bMapLib, setBMapLib] = useState<typeof BMapLib>(libSDK); const [loadMapLib, setLoadBMapLib] = useState(false || !!libSDK); // eslint-disable-next-line react-hooks/exhaustive-deps const opts = { strokeColor, strokeWeight, strokeOpacity, strokeStyle, enableMassClear, enableEditing, enableClicking, icons, }; useMemo(() => { // 如果第一次加载,会执行下面的 Iif (map && bMapLib && !curveLine) { if (bMapLib.CurveLine) { const points = (props.path || []).map((item) => new BMap.Point(item.lng, item.lat)); const instance = new BMapLib.CurveLine(points, opts); map.addOverlay(instance); setCurveLine(instance); } } // 如果 bMapLib 已经加载过,会执行下面的 Iif (map && bMapLib && !bMapLib.CurveLine) { requireScript('//api.map.baidu.com/library/CurveLine/1.5/src/CurveLine.min.js') .then(() => { if (window.BMapLib) { const newMapLib = Object.assign(window.BMapLib, bMapLib); setBMapLib(newMapLib); const points = (props.path || []).map((item) => new BMap.Point(item.lng, item.lat)); const instance = new BMapLib.CurveLine(points, opts); map.addOverlay(instance); setCurveLine(instance); } }) .catch(() => {}); } // 如果第一次加载,会执行下面的 if (!bMapLib && !loadMapLib) { setLoadBMapLib(true); requireScript('//api.map.baidu.com/library/CurveLine/1.5/src/CurveLine.min.js') .then(() => { if (window.BMapLib) { setBMapLib(window.BMapLib); } }) .catch(() => {}); } }, [map, bMapLib, curveLine, loadMapLib, props.path, opts]); const [path, setPath] = useState(props.path || []); useEffect(() => { if (curveLine && props.path && path && JSON.stringify(path) !== JSON.stringify(props.path)) { const points = path.map((item) => new BMap.Point(item.lng, item.lat)); curveLine.setPath(points); } }, [curveLine, path, props.path]); useVisiable(curveLine!, props); useEventProperties<BMap.Polyline, UseCurveLine>(curveLine!, props, [ 'Click', 'DblClick', 'MouseDown', 'MouseUp', 'MouseOut', 'MouseOver', 'Remove', 'LineUpdate', ]); useEnableProperties<BMapLib.CurveLine, UseCurveLine>(curveLine!, props, ['Editing', 'MassClear']); // PositionAt useProperties<BMapLib.CurveLine, UseCurveLine>(curveLine!, props, [ 'StrokeColor', 'StrokeOpacity', 'StrokeWeight', 'StrokeStyle', ]); return { curveLine, setCurveLine, BMapLib: bMapLib, path, setPath, }; } |