
[英]error while updating property 'title' of a view managed by: RNScreenStackHeaderConfig (react native)
[英]Error while updating property 'coordinate' of a view managed by: AIRMapMarker (React native)
我一直在网上搜索有关此错误的适当文档,但运气不好,因为我无法确定此错误的原因。
这是我的整个代码:
第一部分:设置状态
export default class Whereto extends Component<{}> {
constructor(props) {
super(props);
this.state = {
latitude: null,
longitude: null,
location: null,
error: null,
markers:[],
};
}
第二节Component did Mount
componentDidMount() {
navigator.geolocation.getCurrentPosition(
(position) => {
this.setState({
latitude: position.coords.latitude,
longitude: position.coords.longitude,
error: null,
});
//geocode api
var myApiKey = '';
fetch('https://maps.googleapis.com/maps/api/geocode/json?address=' + position.coords.latitude + ',' + position.coords.longitude + '&key=' + myApiKey)
.then((response) => response.json())
.then((responseJson) => {
//console.log('ADDRESS GEOCODE is BACK!! => ' + JSON.stringify(responseJson));
var locationName = responseJson.results[0].address_components.filter(x => x.types.filter(t => t === 'administrative_area_level_2').length > 0)[0].short_name;
//console.log(locationName);
this.setState({
location: locationName,
})
})
//nearby api
var apiPlaceskey = '';
//https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&radius=500&type=restaurant&keyword=cruise&key=YOUR_API_KEY
fetch('https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=' + position.coords.latitude + ',' + position.coords.longitude + '&radius=2000&type=bus_station&key=' + apiPlaceskey)
.then((respplaces) => respplaces.json())
.then((responseJson2) => {
const markers = responseJson2.results.map((result) => ({
latlng: {
latitude: result.geometry.location.lat,
longitude: result.geometry.location.lng,
}
}));
this.setState({ markers });
});
},
(error) => this.setState({error: error.message}),
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000},
);
}
第三部分:在我的渲染和视图部分点击可触摸按钮时保留的功能
fetchDirections = () => {
//directions api
var apiDirectionskey = '';
//const {location} = this.state;
const {latitude} = this.state;
const {longitude} = this.state;
fetch('https://maps.googleapis.com/maps/api/directions/json?origin=' + latitude + ',' + longitude + '&destination=' + goingto + '&mode=transit&transit_mode=bus&key=' + apiDirectionskey)
.then((resdirections) => resdirections.json())
.then((responseJson3) => {
console.log(responseJson3);
});
}
render(){
return(
<View style={styles.container}>
<Mainlogo/>
<TextInput style={styles.boxInput} underlineColorAndroid='rgba(0,0,0,0)' placeholder="Going To?"
underlineColorAndroid='transparent'
onChangeText={(dest) => this.setState({goingto : dest})}
/>
<TouchableOpacity style={styles.button} onPress={this.fetchDirections.bind(this)}>
<Text style={styles.textButton}> Go {this.props.type}</Text>
</TouchableOpacity>
<MapView style={styles.map}
region={{
latitude: this.state.latitude,
longitude: this.state.longitude,
latitudeDelta: 0.02,
longitudeDelta: 0.02
}}
>
</MapView>
<MapView.Marker
coordinate={{
latitude: this.state.latitude,
longitude: this.state.longitude,
latitudeDelta: 0.02,
longitudeDelta: 0.02
}}
image={require('../img/my-pin-512.png')}
title={'you are here'}
/>
{this.state.markers.map(marker => (
<MapView.Marker
coordinate={marker.latlng}
image={require('../img/busstop.png')}
/>
))}
</View>
)
}
}
为了达到这个阶段,从我的主要个人资料页面中点击了一个可触摸的不透明度。 我意识到我正在使用 componendDidMount 和一个单独的 fetch 函数来调用另一个 API 调用。 似乎没有足够的时间来填充状态以导致空值
将初始状态值设置为 0 而不是 null。
this.state = {
latitude:0,
longitude: 0,
latitudeDelta: 0.09,
longitudeDelta: 0.02,
};
我收到了 lat, lng 值作为道具,所以对我有用的是:
<Marker
coordinate={{
longitude: longitude ? longitude : 0,
latitude: latitude ? latitude : 0
}}
title={'owner location'}
/>
将坐标中的初始值从null
更改为[]
解决了这个问题。
<MapView.Polyline
strokeWidth={2}
strokeColor="#00ff00"
coordinates={coords}
/>
通过这个帮助我解决了这个问题:
coordinate={{
latitude: props && props.position && Number(props.position.latitude) ? Number(props.position.latitude) : 0,
longitude: props && props.position && Number(props.position.longitude) ? Number(props.position.longitude) : 0
}}
解决方法是:当您更新<Marker/>
组件时,请确保您没有在坐标的纬度或经度中传递 null。
我在循环一个对象时遇到了同样的错误,我的一些字段是空的。 每当有空值时,我通过默认为 0 来解决它。
简单的答案是 MapView、Markers、Circle 等中使用的坐标......应该是浮点/双精度值而不是字符串......
通常是{latitude: "27.123123",longitude: "85.2312321"},问题不应该是字符串应该是{latitude: 27.123123,longitude: 85.2312321}
<Marker
coordinate={{
latitude: origin.details.geometry.location.lat,
longitude: origin.details.geometry.location.lng}}
title={'Origin'}
/>
<Marker
coordinate={{
latitude: destination.details.geometry.location.lat,
longitude: destination.details.geometry.location.lng}}
title={'Destination'}
/>
我可能会迟到,但上面的技巧奏效了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.