You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Js切换路由后Windyapi无法重绘或重新初始化加载问题咨询

React路由切换后Windy地图无法加载解决方案

问题根因

你当前的Windy初始化逻辑写在index.html中,仅会在页面首次加载时执行一次。首次访问ReportMap组件时,id为windy的DOM节点存在,地图可以正常渲染;切换路由后ReportMap组件卸载,对应的DOM节点被销毁,再次切回组件时新的DOM节点被渲染,但Windy初始化逻辑不会重复执行,且旧的Windy实例还绑定着已销毁的DOM节点,因此地图无法正常显示。

操作步骤

步骤1:修改public/index.html

删除<head>标签中如下的全局初始化代码:

<script >        windyInit( {key:"KLqDKOr1AqsOXMxaSqGzZqqZavGgcOsI"}, function (){} )</script>

保留Leaflet和Windy的SDK引入代码即可。

步骤2:重写ReportMap组件

结合React生命周期,在组件挂载时初始化Windy,卸载时清理实例和全局残留:

import { useEffect, useRef } from 'react';

const ReportMap = () => {
    // 用ref绑定地图容器DOM,避免固定id带来的多实例冲突
    const mapContainerRef = useRef(null);
    // 存储Windy实例用于后续清理
    let windyApi = null;

    useEffect(() => {
        // 确保Windy SDK加载完成后再执行初始化
        if (!window.windyInit || !mapContainerRef.current) return;

        // 初始化Windy地图
        window.windyInit(
            {
                key: "KLqDKOr1AqsOXMxaSqGzZqqZavGgcOsI",
                container: mapContainerRef.current // 绑定当前组件的DOM容器
            },
            (api) => {
                windyApi = api;
                // 可在此处添加自定义地图配置,比如默认中心点、缩放层级等
            }
        );

        // 组件卸载时的清理逻辑,避免内存泄漏和下次初始化冲突
        return () => {
            if (windyApi) {
                // 销毁Leaflet地图实例
                windyApi.map.remove();
                windyApi = null;
            }
            if (mapContainerRef.current) {
                // 清空容器内的残留DOM
                mapContainerRef.current.innerHTML = '';
            }
            // 清理Windy挂载到window上的全局变量
            delete window.W;
        };
    }, []);

    return (
        <div>
            <div ref={mapContainerRef} style={{width: "100%", height: "96vh"}}></div>
        </div>
    );
};

export default ReportMap;

注意事项

  • Windy API同一时间仅支持单个实例运行,不要在多个页面同时渲染Windy地图组件
  • 生产环境建议将Windy API Key存入环境变量管理,避免明文泄露

内容的提问来源于stack exchange,提问作者Samira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:54:01