未定义(读取 'coords')使用@ionic-native/geolocation - 离子/反应
Undefined (reading 'coords') using @ionic-native/geolocation - ionic / react
我试图将地图置于地理位置中心,但出现以下错误:
Uncaught TypeError: Cannot read properties of undefined (reading 'coords')
如果我在 getLocationHandler 中控制台记录位置,对象似乎有坐标。
import GoogleMapReact from "google-map-react";
import { Geolocation } from "@ionic-native/geolocation";
import { IonLoading } from "@ionic/react";
const Map = (props) => {
const [isLoading, setIsLoading] = useState(false);
const [position, setPosition] = useState();
const getLocationHandler = async () => {
try {
setIsLoading(true);
const position = await Geolocation.getCurrentPosition();
setPosition(position);
} catch (e) {}
setIsLoading(false);
};
useEffect(() => {
getLocationHandler();
}, []);
return (
<>
<IonLoading
isOpen={isLoading}
message={"Getting Location..."}
onDidDismiss={() => setIsLoading(false)}
></IonLoading>
<div className="map">
<div className="google-map" style={{ height: "100vh", width: "100%" }}>
<GoogleMapReact
bootstrapURLKeys={{ key: .... }}
defaultCenter={
{
lat: position.coords.latitude,
lng: position.coords.longitude,
}
}
defaultZoom={11}>
</GoogleMapReact>
</div>
</div>
</>
);
};
export default Map;
在您的第一次渲染中,position
将是未定义的,因此当您尝试使用 position.coords.latitude
时它会抛出该错误。我可能会利用您的 isLoading
状态,并且仅在该状态为 false 时呈现组件的第二部分 -
<div className="google-map" style={{ height: "100vh", width: "100%" }}>
{!isLoading && (
<GoogleMapReact
...etc
)}
</div>
此外,将 isLoading
的初始值设置为 true 而不是在异步加载函数中手动将其设置为 true 可能更有意义。
或者,您可以直接检查 position?.coords?.latitude
而不是检查 isLoading
我试图将地图置于地理位置中心,但出现以下错误:
Uncaught TypeError: Cannot read properties of undefined (reading 'coords')
如果我在 getLocationHandler 中控制台记录位置,对象似乎有坐标。
import GoogleMapReact from "google-map-react";
import { Geolocation } from "@ionic-native/geolocation";
import { IonLoading } from "@ionic/react";
const Map = (props) => {
const [isLoading, setIsLoading] = useState(false);
const [position, setPosition] = useState();
const getLocationHandler = async () => {
try {
setIsLoading(true);
const position = await Geolocation.getCurrentPosition();
setPosition(position);
} catch (e) {}
setIsLoading(false);
};
useEffect(() => {
getLocationHandler();
}, []);
return (
<>
<IonLoading
isOpen={isLoading}
message={"Getting Location..."}
onDidDismiss={() => setIsLoading(false)}
></IonLoading>
<div className="map">
<div className="google-map" style={{ height: "100vh", width: "100%" }}>
<GoogleMapReact
bootstrapURLKeys={{ key: .... }}
defaultCenter={
{
lat: position.coords.latitude,
lng: position.coords.longitude,
}
}
defaultZoom={11}>
</GoogleMapReact>
</div>
</div>
</>
);
};
export default Map;
在您的第一次渲染中,position
将是未定义的,因此当您尝试使用 position.coords.latitude
时它会抛出该错误。我可能会利用您的 isLoading
状态,并且仅在该状态为 false 时呈现组件的第二部分 -
<div className="google-map" style={{ height: "100vh", width: "100%" }}>
{!isLoading && (
<GoogleMapReact
...etc
)}
</div>
此外,将 isLoading
的初始值设置为 true 而不是在异步加载函数中手动将其设置为 true 可能更有意义。
或者,您可以直接检查 position?.coords?.latitude
isLoading