跳到主要内容

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...

此时浏览器会弹出获取地理位置授权,点击同意