Javascript Location.watchPositionAsync未将状态设置为位置
Im使用expo location在更新时监视我的用户位置 尤其是Javascript Location.watchPositionAsync未将状态设置为位置,javascript,react-native,geolocation,expo,Javascript,React Native,Geolocation,Expo,Im使用expo location在更新时监视我的用户位置 尤其是Location.watchPositionAsync(选项,回调)函数 它输出正确的位置,但没有使用setLocation location正在返回以下内容: Object { "remove": [Function remove], } setLocation和location存储在上下文提供程序中 我的代码如下: App.js useEffect(() => { con
Location.watchPositionAsync(选项,回调)
函数
它输出正确的位置,但没有使用setLocation
location
正在返回以下内容:
Object {
"remove": [Function remove],
}
setLocation
和location
存储在上下文提供程序中
我的代码如下:
App.js
useEffect(() => {
console.log('hi')
_getLocationAsync = async () => {
let { status } = await Permissions.askAsync(Permissions.LOCATION)
if (status !== 'granted') {
console.log('debieeed')
}
let locations = await Location.watchPositionAsync({ accuracy: Location.Accuracy.Balanced, timeInterval: 10000, distanceInterval: 1 }, (loc) => setLocation(loc.coords));
console.log(locations)
}
_getLocationAsync()
}, [])
我修复了我的问题,只需制作一个返回位置的深度副本 如果我的逻辑错误,请纠正我 我改变了这个
let locations = await Location.watchPositionAsync({ accuracy: Location.Accuracy.Balanced, timeInterval: 10000, distanceInterval: 1 }, (loc) => setLocation(loc.coords));
对此
let locations = await Location.watchPositionAsync({ accuracy: Location.Accuracy.Lowest, distanceInterval: 2000 }, loc => setLocation(JSON.parse(JSON.stringify(loc.coords))));
其中,
JSON.parse(JSON.stringify(loc.coords))
正在制作位置数据的深度副本我只需制作返回位置的深度副本,就解决了我的问题
如果我的逻辑错误,请纠正我
我改变了这个
let locations = await Location.watchPositionAsync({ accuracy: Location.Accuracy.Balanced, timeInterval: 10000, distanceInterval: 1 }, (loc) => setLocation(loc.coords));
对此
let locations = await Location.watchPositionAsync({ accuracy: Location.Accuracy.Lowest, distanceInterval: 2000 }, loc => setLocation(JSON.parse(JSON.stringify(loc.coords))));
其中,
JSON.parse(JSON.stringify(loc.coords))
正在制作位置数据的深度副本我在使用watchPositionAsync()获取任何位置时遇到了同样的问题
似乎有一个bug(或者它是这样设计的,idk)必须将精度设置为高才能获取位置对象。它不适用于其他精度选项(因为它也不适用于默认值)
let location=wait location.watchPositionAsync(
{准确度:位置。准确度。高},
(loc)=>{console.log(loc)}
);代码>使用watchPositionAsync()
似乎有一个bug(或者它是这样设计的,idk)必须将精度设置为高才能获取位置对象。它不适用于其他精度选项(因为它也不适用于默认值)
let location=wait location.watchPositionAsync(
{准确度:位置。准确度。高},
(loc)=>{console.log(loc)}
);代码>您需要阅读世博会网站上的文档
返回解析订阅对象的承诺,该订阅对象只有一个字段:remove(function)——不带参数调用此函数以删除此订阅。将不再为位置更新调用回调
watchPositionAsync
的第二个参数要求一个回调函数,该函数接收一个LocationObject
回调(函数)——在每次位置更新时调用此函数。它接收LocationObject类型的对象作为第一个参数
传递给回调的LocationObject
是您希望设置的状态。您需要阅读世博会网站上的文档
返回解析订阅对象的承诺,该订阅对象只有一个字段:remove(function)——不带参数调用此函数以删除此订阅。将不再为位置更新调用回调
watchPositionAsync
的第二个参数要求一个回调函数,该函数接收一个LocationObject
回调(函数)——在每次位置更新时调用此函数。它接收LocationObject类型的对象作为第一个参数
传递给回调的LocationObject
是您希望在状态中设置的对象。如何停止获取位置更新?如何停止获取位置更新?