在React中使用Google Place Autocomplete API

Ada*_*m.V 11 javascript google-maps-api-3 reactjs

我想在我的react组件中有一个自动完成位置搜索栏,但是不知道如何实现它。该文件说包括

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places&callback=initMap" async defer></script>
Run Code Online (Sandbox Code Playgroud)

在HTML文件中,然后有一个指向元素的初始化函数-我该如何使用我的react组件/ JSX来做到这一点?我想我必须导入api链接,但是我不知道从那里去哪里。

import React from 'react';
import "https://maps.googleapis.com/maps/api/js?key=MYKEY&libraries=places&callback=initMap";

const SearchBar = () => (   
    <input type="text" id="search"/> //where I want the google autocomplete to be
);

export default SearchBar;
Run Code Online (Sandbox Code Playgroud)

Vad*_*hev 14

通过静态加载Google Maps API import

import "https://maps.googleapis.com/maps/api/js?key=MYKEY&libraries=places&callback=initMap";
Run Code Online (Sandbox Code Playgroud)

不支持,为此您需要考虑其他选项:

  • 通过/public/index.html文件引用Google Maps API JS库: <script src="https://maps.googleapis.com/maps/api/js?key=MYKEY&libraries=places"></script>
  • 动态加载JS资源(例如使用此库)

现在关于SearchBar组件,下面的示例演示如何基于此官方示例实现Place Autocomplete的简单版本(不依赖于Google Map实例)

import React from "react";
/* global google */


class SearchBar extends React.Component {
  constructor(props) {
    super(props);
    this.autocompleteInput = React.createRef();
    this.autocomplete = null;
    this.handlePlaceChanged = this.handlePlaceChanged.bind(this);
  }

  componentDidMount() {
    this.autocomplete = new google.maps.places.Autocomplete(this.autocompleteInput.current,
        {"types": ["geocode"]});

    this.autocomplete.addListener('place_changed', this.handlePlaceChanged);
  }

  handlePlaceChanged(){
    const place = this.autocomplete.getPlace();
    this.props.onPlaceLoaded(place);
  }



  render() {
    return (
        <input ref={this.autocompleteInput}  id="autocomplete" placeholder="Enter your address"
         type="text"></input>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 你发现了!我看到了灰色的文字,并认为这只是一条评论。我不知道它在js中起什么作用。 (3认同)
  • 当我这样做时,出现错误“ google”未定义为no-undef。我按照演示将google api脚本(使用我自己的密钥)放在我的public / index.html文件中,但是它仍然无法识别google。某种程度上它不是全球性的? (2认同)
  • @ Adam.V,您可能忘了将`/ * global google * /`放在文件顶部。或者可以使用[此解决方案](/sf/answers/3060265141/)。它还包含为什么会发生此错误的说明 (2认同)