2016-06-11 62 views
3

我的反应,和/终极版组件与谷歌地图合作:谷歌地图做出反应/终极版组件

import React, { Component, PropTypes } from 'react' 
import { connect } from 'react-redux' 

import { changeMapCenter } from '../actions' 

class Map extends Component { 

    componentDidMount() { 
    let script = document.createElement('script') 

    script.setAttribute('type', 'text/javascript') 
    script.setAttribute('src', 'https://maps.googleapis.com/maps/api/js?key=AIzaSyCXg-YGJF&callback=initMap') 
    document.getElementsByTagName('head')[0].appendChild(script) 

    window.initMap =() => { 
     this.map = new google.maps.Map(document.getElementById('map'), { 
     center: this.props.defaultCenter, 
     zoom: this.props.defaultZoom 
     }); 

     this.map.addListener('center_changed', (event) => { 
     let center = { 
      lat: this.map.getCenter().lat(), 
      lng: this.map.getCenter().lng() 
     } 
     this.props.onMapCenterChanging(center) 
     }); 
    } 
    } 

    render() { 
    return (
     <div id='map'></div> 
    ); 
    } 
} 

const mapStateToProps = (state) => { 
    return { 
    mapPoints: state.mapPoints 
    } 
} 

const mapDispatchToProps = (dispatch) => { 
    return { 
    onMapCenterChanging: (center) => { 
     dispatch(changeMapCenter(center)) 
    }  
    } 
} 

export default connect(mapStateToProps, mapDispatchToProps)(Map) 

正如你可以看到现在这部分只是初始化地图并监听地图中心变化。现在我需要渲染一些标记(mapPoints)。从Google API文档我可以做到这一点(例如):

var marker = new google.maps.Marker({ 
    position: myLatlng, 
    map: map, 
    title: 'Click to zoom' 
    }); 

但是我怎么能在'React-style'中做?由于绘图标记不是“呈现”HTML,因此只需调用JS Google Maps API函数即可。我可以把这个逻辑放在'initMap'函数中,但是我的'mapPoints'可以改变。我应该在“渲染”功能中使用JS逻辑(删除已删除的点/绘制新点)吗?谢谢!

+4

我使用你的代码得到了一个'google is undefined'错误。 –

回答