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

React Google Maps API热力图无法渲染,页面变白求助

React Google Maps API热力图显示问题修复方案

你的代码核心问题是同时混用了@react-google-maps/api组件库和原生Google Maps API创建地图实例,导致DOM渲染冲突,进而出现页面空白或热力图不显示的问题。以下是修正后的完整代码:

import React, { useState } from 'react';
import { GoogleMap, useJsApiLoader, HeatmapLayer } from '@react-google-maps/api';

const containerStyle = {
  width: '92vw',
  height: '92vh'
};

const center = {
  lat: 1.2966,
  lng: 103.7764,
};

// 热力图数据,直接使用lat/lng对象即可,无需转成google.maps.LatLng
const heatMapData = [
  { lat: 1.2966, lng: 103.7764 },
  { lat: 1.2950, lng: 103.7750 },
  { lat: 1.2950, lng: 103.7750 },
  { lat: 1.2950, lng: 103.7750 },
  { lat: 1.2950, lng: 103.7750 },
  { lat: 1.2950, lng: 103.7750 },
  { lat: 1.2950, lng: 103.7750 },
  { lat: 1.2950, lng: 103.7750 },
  { lat: 1.2950, lng: 103.7750 },
  { lat: 1.2950, lng: 103.7750 },
  { lat: 1.2950, lng: 103.7750 },
];

function Map() {
  const { isLoaded } = useJsApiLoader({
    id: 'google-map-script',
    googleMapsApiKey: 'API_KEY', // 替换成你的真实API密钥
    libraries: 'visualization',
  });

  const [map, setMap] = useState(null);

  // 通过onLoad获取组件库创建的地图实例
  const handleMapLoad = (mapInstance) => {
    setMap(mapInstance);
  };

  return isLoaded ? (
    <div style={{ paddingTop: '4vh' }}>
      <GoogleMap
        mapContainerStyle={{
          ...containerStyle,
          outline: 'none',
        }}
        center={center}
        zoom={16.1}
        options={{
          mapTypeId: 'satellite',
        }}
        onLoad={handleMapLoad}
      >
        {/* 直接使用组件库提供的HeatmapLayer组件 */}
        {map && (
          <HeatmapLayer
            data={heatMapData}
            map={map}
            options={{
              // 可自定义热力图参数,比如半径、透明度等
              radius: 20,
              opacity: 0.6
            }}
          />
        )}
      </GoogleMap>
    </div>
  ) : <div>加载中...</div>;
}

export default React.memo(Map);

关键修改说明:

  • 移除原生地图创建逻辑:完全依赖@react-google-maps/api的<GoogleMap>组件管理地图实例,避免DOM冲突
  • 正确使用HeatmapLayer组件:组件库已经封装了原生热力图层,直接传入数据和地图实例即可,无需手动创建google.maps.visualization.HeatmapLayer
  • 简化数据格式:热力图数据直接使用{lat: x, lng: y}格式,组件会自动转换为Google Maps所需的坐标对象
  • 通过onLoad获取地图实例:只有当地图加载完成后,再渲染热力图,确保依赖的地图实例存在
  • 替换空加载状态:原代码返回空标签,改为显示加载提示,提升用户体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:20:15