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

React中点击地图获取lat、lng存入state报错如何解决

问题描述

点击地图时可正常获取并打印lat、lng坐标值,但尝试将两个值存入state时触发报错,报错截图如下:
报错截图
原问题代码:

const [userPickPos, setUserPickPos] = useState()
  const MapEvents = () => {
    useMapEvents({
      click(e) {
        const lat = e.latlng.lat;
        console.log(lat) // 打印正常
        const lng = e.latlng.lng;
        console.log(lng) // 打印正常

        setUserPickPos(lat, lng) // 此处触发报错

      },
    });
}
问题根因

React 的useState返回的状态更新函数只接收1个入参,传入的第一个参数才会被设为新的状态值,后续传入的所有参数都会被直接忽略。
你当前代码里写的setUserPickPos(lat, lng)传了两个参数,只有lat会被存到state里,lng会被丢弃;加上你调用useState时没有设置初始值,userPickPos初始为undefined,后续如果尝试读取这个state的属性就会直接抛出报错。
要同时存储经纬度两个关联值,必须把二者封装成一个整体(对象/数组)再传给更新函数,不能分开传两个独立参数。

修复方案

给state设置明确的初始值,调用更新函数时把经纬度封装为对象传入即可:

// 初始化state结构,避免后续读取undefined属性报错
const [userPickPos, setUserPickPos] = useState({ lat: null, lng: null })
const MapEvents = () => {
  useMapEvents({
    click(e) {
      const lat = e.latlng.lat;
      const lng = e.latlng.lng;
      console.log(lat, lng)

      // 封装为对象传入,setter仅接收一个参数
      setUserPickPos({ lat, lng })
    },
  });
}

后续读取坐标时,直接通过userPickPos.lat获取纬度、userPickPos.lng获取经度即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:36:16