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 | /// <reference types="@uiw/react-baidu-map-types" /> import React, { Fragment, useEffect, useState } from 'react'; import { requireScript } from '@uiw/react-baidu-map-utils'; import { RenderProps } from '@uiw/react-baidu-map-map'; export type RequireScriptProps = { src?: string; /** ✅ 加载完成 */ onCompleted?: () => void; /** ❌ 加载失败 */ onFailed?: (error: any) => void; } & RenderProps; export default React.forwardRef< RequireScriptProps, RequireScriptProps & { map: BMap.Map; container?: HTMLDivElement | null; } >((props, ref) => { const { children, map, container } = props || {}; const [completed, setCompleted] = useState(false); useEffect(() => { if (props.src) { requireScript(props.src) .then(() => { setCompleted(true); props.onCompleted && props.onCompleted(); }) .catch((err) => { props.onFailed && props.onFailed(err); }); } // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const chields = typeof children === 'function' ? [children] : React.Children.toArray(children); if (completed) { return ( <Fragment> {typeof children === 'function' && children({ BMap, map, container })} {chields.map((child) => { if (!React.isValidElement(child)) return null; return React.cloneElement(child, { ...child.props, BMap, map, container, }); })} </Fragment> ); } return null; }); |