admin管理员组文章数量:1391955
My React/Redux ponent for working with Google Maps:
import React, { Component, PropTypes } from 'react'
import { connect } from 'react-redux'
import { changeMapCenter } from '../actions'
class Map extends Component {
ponentDidMount() {
let script = document.createElement('script')
script.setAttribute('type', 'text/javascript')
script.setAttribute('src', ';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)
As you can see now this ponent just initializes map and listens map center changing. Now I need render some markers (mapPoints). From Google API Documentation I can do it (for example):
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: 'Click to zoom'
});
But how can I do in 'React-style'? Because drawing marker is not 'render' HTML, it's just calling JS Google Maps API function. I can put this logic in 'initMap' function, but my 'mapPoints' can change. Should I put JS logic (removing deleted points / draw new points) in 'render' function? Thanks!
My React/Redux ponent for working with Google Maps:
import React, { Component, PropTypes } from 'react'
import { connect } from 'react-redux'
import { changeMapCenter } from '../actions'
class Map extends Component {
ponentDidMount() {
let script = document.createElement('script')
script.setAttribute('type', 'text/javascript')
script.setAttribute('src', 'https://maps.googleapis./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)
As you can see now this ponent just initializes map and listens map center changing. Now I need render some markers (mapPoints). From Google API Documentation I can do it (for example):
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: 'Click to zoom'
});
But how can I do in 'React-style'? Because drawing marker is not 'render' HTML, it's just calling JS Google Maps API function. I can put this logic in 'initMap' function, but my 'mapPoints' can change. Should I put JS logic (removing deleted points / draw new points) in 'render' function? Thanks!
Share Improve this question asked Jun 11, 2016 at 20:53 malcoaurimalcoauri 12.2k28 gold badges88 silver badges141 bronze badges 1-
4
I get a
google is undefined
error using your code. – Tyler Zika Commented Mar 19, 2017 at 18:07
1 Answer
Reset to default 6Typically, a React ponent that wraps up some imperative API (like a jQuery widget or similar) does so by not rendering anything (or just rendering a minimal bit of content, like a container div), and then updates the wrapped widget during the React lifecycle methods. There's actually some ponents out there that wrap up the Google Maps API already, and in particular, https://www.fullstackreact./articles/how-to-write-a-google-maps-react-ponent/ walks you through how to do so.
本文标签: javascriptGoogle Maps ReactRedux componentStack Overflow
版权声明:本文标题:javascript - Google Maps ReactRedux component - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744715221a2621363.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论