【问题标题】:How to import google map in react project如何在反应项目中导入谷歌地图
【发布时间】:2016-04-13 03:34:01
【问题描述】:

我在我的项目中使用 webpack 和 reactjs,现在我想集成 google map api。首先,我在 package.json 文件中添加了 "react-google-maps": "^4.9.1"。下面是我的组件类。

import React, {PropTypes, Component} from 'react';

import { GoogleMap, Marker, SearchBox } from "react-google-maps";
import shouldPureComponentUpdate from 'react-pure-render/function';

const greatPlaceStyle = {
  // initially any map object has left top corner at lat lng coordinates
  // it's on you to set object origin to 0,0 coordinates
  position: 'absolute',
  width: 512,
  height: 512,
  left: 512 / 2,
  top: 512 / 2,

  border: '5px solid #f44336',
  borderRadius: 512,
  backgroundColor: 'white',
  textAlign: 'center',
  color: '#3f51b5',
  fontSize: 16,
  fontWeight: 'bold',
  padding: 4
};

export default class SimpleMapPage extends Component {
  static defaultProps = {
    center: {lat: 59.938043, lng: 30.337157},
    zoom: 1,
    greatPlaceCoords: {lat: 59.724465, lng: 30.080121}
  };

  shouldComponentUpdate = shouldPureComponentUpdate;

  constructor(props) {
    super(props);
  }

  render() {
    return (
       <GoogleMap>

        defaultCenter={this.props.center}
        defaultZoom={this.props.zoom}>

        <MyGreatPlace lat={59.955413} lng={30.337844} text={'A'} />
        <MyGreatPlace {...this.props.greatPlaceCoords} text={'B'} />

      </GoogleMap>
    );
  }
}

export default class MyGreatPlace extends Component {
  static propTypes = {
    text: PropTypes.string
  };

  static defaultProps = {};

  //shouldComponentUpdate = shouldPureComponentUpdate;

  constructor(props) {
    super(props);
  }

  render() {
    return (
       <div style={greatPlaceStyle}>
          {this.props.text}
       </div>
    );
  }
}

在我的 index.html 文件中,我在 javascripts 下面添加了。第一个是 goold map api 依赖。第二个是 webpack 打包的 bundle.js。当我访问我的应用程序时,谷歌地图没有出现。我认为问题是无法在我的组件类上导入 google map api。导入googleapis的正确方法是什么?

<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyA2sDQZ-36NLlY4iMvoiuQ7mS1n-v8iq2M" async defer></script>
    <script type="text/javascript" src="bundle.js" charset="utf-8"></script>

【问题讨论】:

    标签: javascript google-maps reactjs webpack


    【解决方案1】:

    我实现了一个函数,它接受两个回调成功和错误,并检查谷歌是否加载。如果未加载,则开始加载使用 load-script 将脚本节点附加到 DOM 中的元素

    import loadScript from 'load-script';
    
    const HOST = 'https://maps.googleapis.com/maps/api/js';
    const KEY = 'YOUR API KEY';
    const URL = `${HOST}?key=${KEY}&libraries=places`;
    
    const loadGoogleMapApi = (
      success = () => {},
      error = () => {}
    ) => {
      if (window.google) {
        success();
      } else {
        loadScript(URL, err => {
          const callback = err ? error : success;
          callback();
        });
      }
    };
    
    export default loadGoogleMapApi;
    

    然后我在我的 react 组件中使用了这个函数:

    initialize() {
      this.api = L.map(this.map);
      this.markers = L.featureGroup();
    
      this.api.addLayer(this.markers);
    
      loadGoogleMapApi(() => {
        this.api.addLayer(new L.Google('ROADMAP'));
      });   
    }
    
    componentDidMount() {
      this.initialize();
      this.draw();
    }
    

    【讨论】:

    • 配合 npm js 效果很好,感谢回答
    【解决方案2】:

    我会将此作为评论留下,但我还没有评论权。您是否尝试过将组件呈现为从请求到 Google 地图的回调的一部分?我想知道请求的异步性质是否会影响其显示。

    考虑像这样包含您的 Google 地图:

    <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"
        async defer></script>
    

    在您的代码中:

    let initMap = () => {
      ReactDOM.render(
        <SimpleMapPage />,
        document.getElementById('...')
      );
    }
    

    我没有看到您在任何地方创建组件的新实例,但我认为您这样做了。

    【讨论】:

    • 如何将 html 链接到我的组件?我通过 webpack 将我所有的 js 打包成一个大的 js 文件,并从我的 html 中引用它。如果我把回调放在html中,它如何链接到我的js或组件?
    • 您的内联脚本可以引用外部脚本,因为它们都存在于全局命名空间中。
    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多