Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在React中加载Google Places API_Javascript_Reactjs_Google Maps_Google Places Api - Fatal编程技术网

Javascript 如何在React中加载Google Places API

Javascript 如何在React中加载Google Places API,javascript,reactjs,google-maps,google-places-api,Javascript,Reactjs,Google Maps,Google Places Api,我想在我的React应用程序中使用Google地图和Places API,以便用户能够在地图上找到他们所在地区的医院 我正在使用@react google maps/api和使用places autocomplete npm包与api交互以显示地图和地点。我正在使用useLoadScript钩子加载API密钥,并声明我将使用的库 在本例中,正如我启用了位置和映射JavaScript API一样,我在库数组中提供了位置 我已尝试将以下脚本添加到index.html文件: <script sr

我想在我的React应用程序中使用Google地图和Places API,以便用户能够在地图上找到他们所在地区的医院

我正在使用@react google maps/api和使用places autocomplete npm包与api交互以显示地图和地点。我正在使用useLoadScript钩子加载API密钥,并声明我将使用的库

在本例中,正如我启用了位置和映射JavaScript API一样,我在库数组中提供了位置

我已尝试将以下脚本添加到index.html文件:

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"></script>
但是我得到了一个错误:你正在加载地图多次

下面是我的代码片段,我使用@react google maps/api中的useLoadScript钩子

请说明如何解决此问题?

如果您使用@react google maps/api库的useLoadScript并使用places autocomplete,则需要提供['places']作为库的值,以便在代码中使用places autocomplete。请注意,这个useLoadScript将在您的代码中加载Google Maps JavaScript脚本标记,您不再需要在html文件中添加脚本标记

据我所知,在您的用例中,用户将从自动完成下拉列表中选择一个位置,并且最近的医院应该在地图中返回

要实现这一点,您需要有以下流程:

使用“使用地点自动完成”在搜索地点时提供地点建议。这个库有一个GetGeocode和一个可用于获取所选位置坐标的。 获得坐标后,您可以在请求中使用关键字hospital并定义半径。这将搜索定义半径内以所选地点为中心的医院列表。 您可以在结果列表中循环,并将每个坐标作为标记固定在地图中。 在这里;下面是示例和代码段。确保添加API密钥:

Index.js

import React from "react";
import { render } from "react-dom";
import Map from "./Map";

render(<Map />, document.getElementById("root"));
Map.js

/*global google*/
import React from "react";
import { GoogleMap, useLoadScript } from "@react-google-maps/api";
import Search from "./Search";

let service;
const libraries = ["places"];

const mapContainerStyle = {
  height: "100vh",
  width: "100vw"
};
const options = {
  disableDefaultUI: true,
  zoomControl: true
};
const center = {
  lat: 43.6532,
  lng: -79.3832
};

export default function App() {
  const { isLoaded, loadError } = useLoadScript({
    googleMapsApiKey: "YOUR_API_KEY",
    libraries
  });
  const mapRef = React.useRef();
  const onMapLoad = React.useCallback(map => {
    mapRef.current = map;
  }, []);

  const panTo = React.useCallback(({ lat, lng }) => {
    mapRef.current.panTo({ lat, lng });
    mapRef.current.setZoom(12);
    let map = mapRef.current;

    let request = {
      location: { lat, lng },
      radius: "500",
      type: ["hospital"]
    };

    service = new google.maps.places.PlacesService(mapRef.current);
    service.nearbySearch(request, callback);
    function callback(results, status) {
      if (status === google.maps.places.PlacesServiceStatus.OK) {
        for (let i = 0; i < results.length; i++) {
          let place = results[i];
          new google.maps.Marker({
            position: place.geometry.location,
            map
          });
        }
      }
    }
  }, []);

  return (
    <div>
      <Search panTo={panTo} />
      <GoogleMap
        id="map"
        mapContainerStyle={mapContainerStyle}
        zoom={8}
        center={center}
        options={options}
        onLoad={onMapLoad}
      />
    </div>
  );
}
Search.js

从React导入React; 导入使用地点完成{ 获取地理编码, getLatLng }从使用地点自动完成; 导出默认函数搜索{panTo}{ 常数{ 准备好的 价值 建议:{状态,数据}, 设置值, 明确的建议 }=使用placesauto完成{ 请求选项:{ /*在此处定义搜索范围*/ }, 去盎司:300 }; 常量handleInput=e=>{ //更新输入元素的关键字 setValuee.target.value; }; const handleSelect={description}=>=>{ //当用户选择一个位置时,我们可以替换关键字,而无需从API请求数据 //通过将第二个参数设置为false setValuedescription,false; 明确建议; //通过实用程序函数获取纬度和经度 getGeocode{地址:description} .thenresults=>getLatLngresults[0] .然后{lat,lng}=>{ 潘托{lat,lng}; } .catcherror=>{ console.log请参阅