【发布时间】:2018-09-09 12:15:37
【问题描述】:
React Native 说 Undefined 不是一个对象,而它显然是一个对象!!我对发生的事情感到困惑。
看下面的代码。向下浏览到 render() 函数。见下文...console.log(cords.coords);
console.log(cords.coords); 输出以下内容...
08:37:22: Object {
08:37:22: "coords": Object {
08:37:22: "accuracy": 5,
08:37:22: "altitude": 0,
08:37:22: "altitudeAccuracy": -1,
08:37:22: "heading": -1,
08:37:22: "latitude": 39.946313,
08:37:22: "longitude": -82.810829,
08:37:22: "speed": -1,
08:37:22: },
08:37:22: "timestamp": 1522413346644.865,
08:37:22: }
有人会说,要检索这些数据,您必须执行以下操作。 console.log(cords.coords.coords.latitude) 获取纬度。但它说它未定义。即使我这样做 console.log(cords.coords.coords) ,它也会说它未定义?我做错了什么?
注意console.log(cords.coords); 是脚本中触发错误的地方
请记住,以下代码确实有效。只有当我将console.log(cords.coords); 更改为console.log(cords.coords.coords.latitude); 时它才会中断
import React, { Component } from 'react';
import {Platform, StyleSheet, Dimensions, Text, View } from 'react-native';
import MapView, { PROVIDER_GOOGLE } from 'react-native-maps';
import { Constants, Location, Permissions } from 'expo';
export default class MapScreen extends Component<Props> {
constructor(props) {
super(props);
this.state = {
markers: [{
title: 'hello',
coordinates: {
latitude: 39.946313,
longitude: -82.810829
},
},
{
title: 'hello',
coordinates: {
latitude: 39.945838,
longitude: -82.813018
},
}
]
}
console.log("Get Geo Synce");
this._getLocationAsync();
}
_getLocationAsync = async () => {
console.log("load geo sync");
//Location.setApiKey("AIzaSyBY45685CkDPy5a4ss29IL2ZjIvTvYTMyk");
let { status } = await Permissions.askAsync(Permissions.LOCATION);
if (status !== 'granted') {
this.setState({
locationResult: 'Permission to access location was denied',
});
}
console.log("Loading Location 1");
let location = await Expo.Location.getCurrentPositionAsync({ enableHighAccuracy: true });
console.log("Retrieved Location");
this.setState({ coords: location });
};
render() {
const { params } = this.props.navigation.state;
let coords = params ? params.coords.coords : null;
let cords = this.state;
console.log(cords.coords);
//let coords = state.locationResult.coords;
return (
<View style={{flex: 1}}>
<MapView
style={ styles.container }
initialRegion={{
latitude:coords.latitude,
longitude:coords.longitude,
latitudeDelta:0.0992,
longitudeDelta:0.0421,
}}
>
{this.state.markers.map(marker => (
<MapView.Marker
coordinate={marker.coordinates}
title={marker.title}
/>
))}
</MapView>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
width:'100%',
height:'100%',
},
});
【问题讨论】:
-
这是错误所在的行:latitude:coords.latitude?它不是指 coords.latitude 而不是 cords.coords.latitude 吗?
-
console.log(cords.coords);是触发错误的地方。 ` latitude:coords.latitude` 工作正常,因为如果你查看`render()` 函数。我正在从let coords = params ? params.coords.coords : null;中提取该值。我创建了cords变量来最终替换它。 -
更正如果我将
console.log(cords.coords);替换为console.log(cords.coords.latitude);,则会触发错误 -
你的意思是 coords.coords?你已经粘贴了cords.coords。
let cords = this.state也应该总是失败,因为你做了一个 setState({coords}) 而不是 setState({cords}) -
它不会失败,因为我将状态对象放在
cords中。因此,要检索coords,我必须执行cords.coords,它确实有效。只有当我做cords.coords.coords.latitude时它才会失败。在帖子中查看我的对象的结构。终端数据。
标签: reactjs typescript react-native expo