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

React应用Geocode获取新经纬度后GoogleMapReact地图中心未更新

问题根因

google-map-react中所有带default前缀的属性都是非受控属性,仅在组件首次挂载时读取传入值作为初始配置,后续组件重渲染、传入值更新时,这类属性不会响应变化。
你的代码中defaultCenter只会在第一次渲染时读取初始值lat:0, lng:0作为地图中心点。后续useEffect里地理编码接口请求完成,虽然state更新触发了组件重渲染,但defaultCenter不会重新读取新的经纬度,所以地图会一直停在初始坐标位置。

修复方案

将defaultCenter替换为受控属性center即可。center属性会实时响应传入值的变化,在经纬度更新后自动调整地图中心点。
修正后的代码:

const CustomMap = () => {
const [customLat, setCustomLat] = useState(0);
const [customLng, setCustomLng] = useState(0);

useEffect(() => {
    Geocode.fromAddress("Eiffel Tower").then(
        (response) => {
            const { lat, lng } = response.results[0].geometry.location;
            setCustomLat(lat);
            setCustomLng(lng);
        },
        (error) => {
            console.log(error.data);
        }
    );

}, [])

return (
    <GoogleMapReact
        bootstrapURLKeys={{ key: 'API_KEY' }}
        center={{ lat: customLat, lng: customLng }}
        defaultZoom={11}>
    </GoogleMapReact>
)
}

补充:defaultZoom属于非受控的初始缩放级别配置,如果你不需要后续动态修改地图缩放等级可以保留;如果需要动态控制缩放,同理替换为受控属性zoom即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:31:04