useGeolocation
import { useState, useEffect } from "react"
export default function useGeolocation(options) {
const [loading, setLoading] = useState(true)
const [error, setError] = useState()
const [data, setData] = useState({})
useEffect(() => {
const successHandler = e => {
setLoading(false)
setError(null)
setData(e.coords)
}
const errorHandler = e => {
setError(e)
setLoading(false)
}
navigator.geolocation.getCurrentPosition(
successHandler,
errorHandler,
options
)
const id = navigator.geolocation.watchPosition(
successHandler,
errorHandler,
options
)
return () => navigator.geolocation.clearWatch(id)
}, [options])
return { loading, error, data }
}
介绍
一个封装了获取当前所在地理位置信息的钩子函数,返回值为加载状态值、错误信息和经纬度值。
使用方法
实时编辑器
function GeolocationComponent() { const { loading, error, data: { latitude, longitude }, } = useGeolocation() return ( <> <div>Loading: {loading.toString()}</div> <div>Error: {error ? error.message : ''}</div> <div> {latitude} x {longitude} </div> </> ) }
结果
Loading...
此时浏览器会弹出获取地理位置授权,点击同意