gpt4 book ai didi

reactjs - 使用 React 更新基于地理位置的 Google map

转载 作者:行者123 更新时间:2023-12-03 13:58:37 26 4
gpt4 key购买 nike

我正在尝试显示 Google map ,并根据地理位置返回的纬度和经度将 map 居中。但是, map 显示为默认值,并且不会通过地理位置值进行渲染。我在组件状态中设置了纬度和经度,并尝试在状态更新后重新渲染组件。但这不起作用。下面是我的代码。

MapView.js

import React, { Component } from 'react'
import { withScriptjs, withGoogleMap, GoogleMap, Marker } from 'react-google-maps'
import MapComponent from './MapComponent'

class MapView extends Component {
constructor(props){
super(props)
this.state = {
currentLatLng: {
lat: 0,
lng: 0
},
isMarkerShown: false
}
}

componentWillUpdate(){
this.getGeoLocation()
}

componentDidMount() {
this.delayedShowMarker()
}

delayedShowMarker = () => {
setTimeout(() => {
this.getGeoLocation()
this.setState({ isMarkerShown: true })
}, 5000)
}

handleMarkerClick = () => {
this.setState({ isMarkerShown: false })
this.delayedShowMarker()
}

getGeoLocation = () => {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
position => {
this.setState({
lat: position.coords.latitude,
lng: position.coords.longitude
})
}
)
} else {
error => console.log(error)
}
}

render() {
return (
<MapComponent
isMarkerShown={this.state.isMarkerShown}
onMarkerClick={this.handleMarkerClick}
currentLocation={this.state.currentLatLng}
/>
)
}
}

export default MapView;
<小时/>

MapComponent.js

import React, { Component } from 'react'
import { compose, withProps } from 'recompose'
import { withScriptjs, withGoogleMap, GoogleMap, Marker } from 'react-google-maps'

const MapComponent = compose(
withProps({
googleMapURL: "https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry,drawing,places",
loadingElement: <div style={{ height: `100%` }} />,
containerElement: <div style={{ height: `400px` }} />,
mapElement: <div style={{ height: `100%` }} />,
}),
withScriptjs,
withGoogleMap
)((props) =>
<GoogleMap
defaultZoom={8}
defaultCenter={{ lat: props.currentLocation.lat, lng: props.currentLocation.lng }}
>
{props.isMarkerShown && <Marker position={{ lat: props.currentLocation.lat, lng: props.currentLocation.lng }} onClick={props.onMarkerClick} />}
</GoogleMap>
)

export default MapComponent

最佳答案

事实上,由于 currentLatLng 未更新, map 并未居中,您可能需要如下所示的内容:

getGeoLocation = () => {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
position => {
console.log(position.coords);
this.setState(prevState => ({
currentLatLng: {
...prevState.currentLatLng,
lat: position.coords.latitude,
lng: position.coords.longitude
}
}))
}
)
} else {
error => console.log(error)
}
}

代替原来的getGeoLocation函数

关于reactjs - 使用 React 更新基于地理位置的 Google map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50780417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com