В этой серии статей мы отправимся в путешествие по миру пользовательских хуков React, открывая для себя их огромный потенциал для улучшения ваших проектов разработки. Сегодня мы сосредоточимся на хуке «useGeolocation», одном из многих тщательно разработанных хуков, доступных в коллекции пользовательских хуков React.

Github: https://github.com/sergeyleschev/react-custom-hooks

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

Хук useGeolocation использует хуки useState и useEffect от React для управления состоянием загрузки, ошибками и данными о геолокации. Для настройки поведения геолокации требуется дополнительный параметр "options", позволяющий вам точно настроить точность и другие параметры в соответствии с вашими конкретными потребностями.

Одним из ключевых преимуществ useGeolocation является его простота. Инкапсулируя сложную логику, необходимую для доступа к геолокации и ее обработки, этот хук обеспечивает простое и многократно используемое решение. Хук автоматически обрабатывает состояние загрузки, обновляя его при получении данных геолокации, и устанавливает состояние ошибки, если в процессе возникают какие-либо проблемы.

Функция useGeolocation также использует метод watchPosition из Geolocation API, который позволяет осуществлять непрерывный мониторинг местоположения пользователя. Это может быть полезно в сценариях, где требуется обновление местоположения пользователя в режиме реального времени, например, в приложениях для отслеживания или интерактивных картах.

Чтобы воспользоваться этим приемом, просто импортируйте useGeolocation в свой компонент и измените параметры загрузки, ошибки и данных. Объект data содержит значения широты и долготы, что позволяет легко отображать местоположение пользователя в пользовательском интерфейсе. Переменная загрузки информирует вас о текущем состоянии поиска геолокации, а переменная error предоставляет любые сообщения об ошибках, если это применимо.

import useGeolocation from "./useGeolocation"

export default function GeolocationComponent() {
    const {
        loading,
        error,
        data: { latitude, longitude },
    } = useGeolocation()
    return (
        <>
            <div>Loading: {loading.toString()}</div>
            <div>Error: {error?.message}</div>
            <div>
                {latitude} x {longitude}
            </div>
        </>
    )
}

Компонент GeolocationComponent, показанный выше, демонстрирует базовую реализацию хука useGeolocation. Он отображает состояние загрузки, сообщение об ошибке (если таковое имеется) и значения широты и долготы пользователя. С помощью всего нескольких строк кода вы можете легко интегрировать хук геолокации в свои приложения React.

Полная версия | Пользовательские хуки React: https://habr.com/en/articles/746760/

Комментарии (0)