我正在尝试在componentDidMount中设置位置。我猜测this
没有被传递到内部函数。
参见我的例子:
import React, { Component } from 'react';
import GoogleMapReact from 'google-map-react';
const map = {
width: '100%',
height: '100vh'
};
const AnyReactComponent = ({ text }) => <div>{ text }</div>;
export default class Map extends Component {
constructor(props) {
super(props)
this.state = {
center: { lat: 40.7446790, lng: -73.9485420 },
zoom: 11
}
};
componentDidMount(){
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
function(position) {
console.log(position);
this.setState({
center: { lat: position.coords.latitude, lng: position.coords.longitude },
})
}
)
}
}
render() {
return (
<div className='map' style={ map }>
<GoogleMapReact
bootstrapURLKeys={{ key: 'AIzaSyD3Gu9y1qJChfayVFglovKEY2xjgKBiCJA' }}
defaultCenter={ this.state.center }
defaultZoom={ this.state.zoom }>
<AnyReactComponent
lat={ 40.7473310 }
lng={ -73.8517440 }
text={ "Where's Waldo?" }
/>
</GoogleMapReact>
</div>
)
};
};
&#13;
这种情况一直在发生,我不明白为什么。
你能帮忙吗?
答案 0 :(得分:1)
首先,建议不要在componentDidMount中使用setState。考虑使用componentWillMount。
其次,您在函数中使用this
。 this
不再引用该组件。你可能需要做臭名昭着的 - >转换。
componentWillMount(){
const that = this;
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
function(position) {
console.log(position);
that.setState({
center: { lat: position.coords.latitude, lng: position.coords.longitude },
})
}
)
}
}
答案 1 :(得分:0)
将function (position) {}
更改为ES6箭头函数(position) => {}
以在闭包中保留this
componentDidMount(){
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
(position) => {
console.log(position);
this.setState({
center: { lat: position.coords.latitude, lng: position.coords.longitude },
})
}
)
}
答案 2 :(得分:0)
这个composentDidMount应该更好。箭头功能没有&#34;这个&#34;。所以&#34;这个&#34;将引用该组件。
componentDidMount(){
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
(position) => {
console.log(position);
this.setState({
center: { lat: position.coords.latitude, lng: position.coords.longitude },
})
}
)
}
}
答案 3 :(得分:-1)
通常不应该更改componentDidMount()中的状态。
阅读docs了解更多信息