From 0ea7b954eb0462e322a1d4cc47f017f05f0c8cae Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 12 May 2021 15:01:21 +0800 Subject: [PATCH] fix: Fix errors in next.js #130 --- src/CustomOverlay/useCustomOverlay.tsx | 3 ++- src/PointCollection/usePointCollection.ts | 3 ++- src/utils/requireScript.ts | 17 ++++++++++------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/CustomOverlay/useCustomOverlay.tsx b/src/CustomOverlay/useCustomOverlay.tsx index d2dc54e8e..d4d625f45 100644 --- a/src/CustomOverlay/useCustomOverlay.tsx +++ b/src/CustomOverlay/useCustomOverlay.tsx @@ -71,7 +71,7 @@ export default function useCustomOverlay(props = {} as UseCustomOverlay) { }; }, [customOverlay, map]); useMemo(() => { - if (map && !portal) { + if (map && !portal && document) { const elm = document.createElement('div'); const CustomOverlay = getCustomOverlay(); const portalInstance = ReactDOM.createPortal(children, elm); @@ -91,6 +91,7 @@ export default function useCustomOverlay(props = {} as UseCustomOverlay) { setPortal(portalInstance); setCount(count + 1); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [children, customOverlay]); useProperties(customOverlay!, props, ['ZIndex', 'Offset', 'Position', 'Visiable']); diff --git a/src/PointCollection/usePointCollection.ts b/src/PointCollection/usePointCollection.ts index d2f4b1e80..ca2846dc3 100644 --- a/src/PointCollection/usePointCollection.ts +++ b/src/PointCollection/usePointCollection.ts @@ -21,7 +21,7 @@ export default function usePointCollection(props = {} as UsePointCollection) { useEffect(() => { if (!BMap || !map) return; // 判断当前浏览器是否支持绘制海量点 - if (!document.createElement('canvas').getContext) return; + if (document && !document.createElement('canvas').getContext) return; const opts = { shape, color, size }; if (!pointCollection) { if (!opts.size) opts.size = BMAP_POINT_SIZE_SMALL; @@ -38,6 +38,7 @@ export default function usePointCollection(props = {} as UsePointCollection) { } }); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [map]); useEffect(() => { diff --git a/src/utils/requireScript.ts b/src/utils/requireScript.ts index 39568ea41..f4f952676 100644 --- a/src/utils/requireScript.ts +++ b/src/utils/requireScript.ts @@ -1,4 +1,7 @@ -const headElement = document.head || document.getElementsByTagName('head')[0]; +const headElement = (() => { + if (!document) return; + return document.head || document.getElementsByTagName('head')[0]; +})(); const _importedScript: { [src: string]: true } = {}; /** @@ -6,7 +9,7 @@ const _importedScript: { [src: string]: true } = {}; */ export function requireCss(src: string): Promise { return new Promise((resolve, reject) => { - if (src in _importedScript) { + if (src in _importedScript || !document) { resolve(); return; } @@ -15,14 +18,14 @@ export function requireCss(src: string): Promise { script.rel = 'stylesheet'; script.href = src; script.onerror = (err) => { - headElement.removeChild(script); + headElement!.removeChild(script); reject(new URIError(`The css ${src} is no accessible.`)); }; script.onload = () => { _importedScript[src] = true; resolve(); }; - headElement.appendChild(script); + headElement!.appendChild(script); }); } @@ -31,7 +34,7 @@ export function requireCss(src: string): Promise { */ export function requireScript(src: string): Promise { return new Promise((resolve, reject) => { - if (src in _importedScript) { + if (src in _importedScript || !document) { resolve(); return; } @@ -40,13 +43,13 @@ export function requireScript(src: string): Promise { script.id = '_react_baidu_map'; script.src = src; script.onerror = (err) => { - headElement.removeChild(script); + headElement!.removeChild(script); reject(new URIError(`The Script ${src} is no accessible.`)); }; script.onload = () => { _importedScript[src] = true; resolve(); }; - headElement.appendChild(script); + headElement!.appendChild(script); }); }