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

React项目中Map组件渲染报错:元素类型无效+API调用属性读取失败

React项目中Map组件渲染报错:元素类型无效+API调用属性读取失败

我仔细看了你的代码和报错信息,目前有两个核心问题需要解决,咱们一个个来理清楚:

一、解决「元素类型无效」的报错

这个错误通常是组件的导入/导出方式不匹配导致的,你可以从这几个方向排查:

  • 检查Map组件的导出:确认你在Map.js文件末尾加了export default Map;,如果是命名导出(比如export const Map = () => {...}),那在App.js里导入时要写成import { Map } from './Map',不要和默认导出混用。
  • 检查其他组件的导入:比如Header、List组件,同样要保证导入方式和它们的导出方式一致,比如默认导出对应import Header from './Header',命名导出对应import { List } from './List'。
  • 确认GoogleMapReact的导入:你要确保已经正确安装了google-map-react依赖,并且在Map.js里正确导入:import GoogleMapReact from 'google-map-react'。

二、解决「Cannot read properties of undefined (reading 'lat')」的API调用错误

这个错误的根源是API调用时传入了undefined的参数:
在App.js的第二个useEffect里,组件初始化时bounds的初始值是空对象{},这时候bounds.sw和bounds.ne都是undefined,直接传给getPlacesData后,在index.js里尝试读取sw.lat自然会报错。

具体修改步骤:

  1. 修改App.js中的useEffect,先判断参数是否有效再调用API:
useEffect(() => {
  // 只有当bounds的sw和ne都存在时,才调用API
  if (bounds.sw && bounds.ne) {
    getPlacesData(bounds.sw, bounds.ne)
      .then((data) => {
        // 给data加默认空数组,避免setPlaces接收undefined
        setPlaces(data || []);
      })
  }
}, [coordinates, bounds]);
  1. 给index.js的getPlacesData加参数校验,增强代码健壮性:
export const getPlacesData = async(sw, ne) => {
  try {
    // 先校验参数,无效直接返回空数组
    if (!sw || !ne) return [];
    
    const {data:{data}} = await axios.get(URL, {
      params: {
        bl_latitude: sw.lat,
        tr_latitude: ne.lat,
        bl_longitude: sw.lng,
        tr_longitude: ne.lng,
      },
      headers: {
        'X-RapidAPI-Key': '你的API Key', // 记得替换成实际有效的API Key
        'X-RapidAPI-Host': 'travel-advisor.p.rapidapi.com'
      }
    });

    return data;
  }
  catch(error){
    console.log(error);
    // 出错时返回空数组,避免上游接收undefined导致渲染问题
    return [];
  }
}
  1. 初始化places为数组:你已经写了const [places, setPlaces] = useState([]);,这个很好,能避免Map组件里places.map时因为undefined报错。

另外提个小建议:Map组件里places.map的key尽量用place.id这类唯一标识,而不是索引i,这样当列表项顺序变化时React能更高效地更新DOM。

备注:内容来源于stack exchange,提问作者angad gosain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:14:40