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

React onClick事件触发后组件不渲染,google-map-react点击图标弹窗不显示

问题根本原因

你使用普通变量currentToolTip存储弹窗显示状态,React无法监听普通变量的变更,因此修改该变量后不会触发组件重新渲染,UI不会同步更新,导致弹窗无法显示。

解决方案

  • 用React的useState Hook声明弹窗状态变量,状态变更会自动触发组件重渲染
  • 调整状态更新逻辑,通过状态setter函数修改显示值
  • 给Tooltip组件添加足够高的z-index,避免被地图图层遮挡

修正后代码示例

import { useState } from 'react';

// 弹窗组件增加基础样式避免透明/被遮挡
const ToolTip = ({name, address, info}) => <div style={{
  zIndex: 999,
  background: '#ffffff',
  padding: '10px',
  borderRadius: '6px',
  boxShadow: '0 2px 8px rgba(0,0,0,0.15)'
}}>
  <h1>{name}</h1>
  <h2>{address}</h2>
  <p>{info}</p>
</div>;

// 用useState声明状态
const [currentToolTip, setCurrentToolTip] = useState("");

const showToolTip = (name) =>  {
  setCurrentToolTip(name);
  console.log(name);
};

const directory = places.map((data) => {
  if ((data.category === ButtonTitle.CampusSeeking) && data.deptMarker === "")
    return (
      <div lat={data.latitude} lng={data.longitude}>
        <Pin
          lat={data.latitude}
          lng={data.longitude}
          color={blue} 
          height="25px"
          width="25px"
          onClick={() => showToolTip(data.name)}
        />
        {currentToolTip === data.name && (
          <ToolTip
            lat={data.latitude}
            lng={data.longitude}
            name={data.name}
            address={data.address}
            info={data.info}
          />
        )}
      </div>
    );
// 原有剩余逻辑保持不变
});

return (         
  {loc === ButtonTitle.CampusSeeking && directory} 
);

额外排查点

如果调整后仍看不到弹窗,确认所有自定义覆盖物都放在google-map-react的GoogleMap组件内部,且绑定的lat、lng坐标值格式合法即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 21:06:05