Все подсказки, которые вам нужны для решения вашей проблемы, приведены в коде ошибки
- Крюки или пользовательские крючки предназначены для использования в функциональных компонентах
- Пользовательский крючок - это крючок, который можно вызвать как функцию. Тем не менее, он должен иметь префикс
use
, чтобы дать знать, что это пользовательский хук
В соответствии с вышеуказанным условием ваш компонент Weather является компонентом класса, который либо нужно преобразовать в функциональный компонент или избегайте использования геолокации в качестве пользовательского хука
Во-вторых, поскольку geoLocation предназначен для пользовательского хука, вы должны называть его useGetLocation
import React from 'react';
import { useGetLocation } from './getlocation';
const Weather = (props) => {
const geoLocation = useGetLocation();
useEffect(() => {
document.title = "Weather";
}, []);
return(
<>
<h1>Weather</h1>
<h2>{React.version}</h2>
</>
);
}
export default Weather;
import {useState, useEffect} from 'react';
export const useGetLocation = () => {
const [position, setPosition] = useState({});
const [error, setError] = useState(null);
const successHandler = ({coords}) => {
setPosition({
latitude: coords.latitude,
longitude: coords.longitude
});
};
const errorHandler = (error) => { setError(error.message); };
useEffect(() => {
if (!navigator.geolocation) {
setError("Geolocation might not be supported.");
return;
}
navigator.geolocation.getCurrentPosition(
successHandler,
errorHandler);
return () => {}
}, []);
return [position, error];
};
Рабочая демоверсия