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

React组件变量导出问题:无法获取经纬度供天气API使用

解决子组件向父组件传递地址与经纬度的问题

在React里,子组件向父组件传递数据的标准方式是通过props传递回调函数,你可以按照以下步骤修改代码:

1. 修改子组件PlaceComponent,接收回调props

给组件添加props参数,并在获取到位置信息后调用回调函数传递数据:

import React, { useRef } from "react";
import { StandaloneSearchBox, useJsApiLoader } from "@react-google-maps/api";

const libraries = ['places'];
// 接收父组件传递的回调函数props
const PlaceComponent = ({ onLocationSelect }) => {
  const inputRef = useRef();

  const { isLoaded, loadError } = useJsApiLoader({
    googleMapsApiKey: process.env.REACT_APP_API_GOOGLE_KEY,
    libraries
  });

  // 处理加载错误
  if (loadError) {
    return <div>地图服务加载失败,请检查API密钥</div>;
  }

  const handlePlaceChanged = () => { 
    const [ place ] = inputRef.current.getPlaces();
    if(place && onLocationSelect) { 
      const locationData = {
        address: place.formatted_address,
        lat: place.geometry.location.lat(),
        lng: place.geometry.location.lng()
      };
      // 调用父组件传来的回调,传递数据
      onLocationSelect(locationData);
    } 
  }

  return (
    isLoaded && (
      <StandaloneSearchBox
        onLoad={ref => inputRef.current = ref}
        onPlacesChanged={handlePlaceChanged}
      >
        <input
          type="text"
          className="form-control"
          placeholder="Enter Location"
        />
      </StandaloneSearchBox>
    )
  );
};

export default PlaceComponent;

2. 在父组件中使用PlaceComponent,接收传递的数据

父组件通过传入onLocationSelect回调函数,拿到子组件传递的地址和经纬度:

import React, { useState } from "react";
import PlaceComponent from "./PlaceComponent";

const WeatherApp = () => {
  // 用state存储位置数据
  const [location, setLocation] = useState(null);

  const handleLocationSelect = (locationData) => {
    // 这里可以拿到子组件传来的地址、经纬度,用于调用天气API
    setLocation(locationData);
    console.log("从子组件拿到的数据:", locationData);
    // 这里写调用天气API的逻辑
  };

  return (
    <div>
      <h1>天气应用</h1>
      <PlaceComponent onLocationSelect={handleLocationSelect} />
      {location && (
        <div className="mt-3">
          <p>选择的地址: {location.address}</p>
          <p>纬度: {location.lat}</p>
          <p>经度: {location.lng}</p>
        </div>
      )}
    </div>
  );
};

export default WeatherApp;

关键说明

  • 子组件通过props接收父组件的回调函数,当获取到位置信息时主动调用这个函数,把数据作为参数传过去。
  • 父组件通过useState存储这些数据,后续就可以用这些经纬度去调用天气API了。
  • 新增了loadError的处理,避免组件加载失败时无提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:20:21