Ошибка захвата данных о местоположении из массива в методе выборки

#reactjs

#reactjs

Вопрос:

Я хочу извлечь координаты широты / длины из состояния местоположения, однако я получаю сообщение об ошибке, в котором говорится, что невозможно прочитать свойства undefined [0] .

Я вызвал функцию получения местоположения в функции погоды, есть ли что-то, чего мне не хватает?

 import Card from "../Card/Card";
import { useState } from "react";

const WeatherCard = () => {
  const [location, setLocation] = useState();

  // function gets users location, and sets it to location state
  const getLocation = () => {
    // uses navigator to get location
    navigator.geolocation.getCurrentPosition((location) => {
    // sets lat/long position to state[array]
    setLocation([location.coords.latitude, location.coords.longitude]);
    });
  };

  // function to get weather data from api
  const getWeather = () => {
    // calls getLocation function
    getLocation();
    // fetches weather data from api
    fetch(`https://api.openweathermap.org/data/2.5/onecall?lat=${location[0]}amp;lon=${location[1]}amp;exclude={part}amp;appid=${process.env.REACT_APP_API_KEY}`)
    // takes data and parses it to json
    .then(res => res.json())
    // sets weather data to console
    .then(data => console.log(data))
  }

  // renders the weather card
  return (
    <Card>
      <div>{location}</div>
      <button onClick={getWeather}>Click</button>
    </Card>
  );
};

export default WeatherCard;

 

Ответ №1:

API геолокации является асинхронным, поэтому исправьте функцию getLocation на async:

 const getLocation = async () => {
    // uses navigator to get location
    await navigator.geolocation.getCurrentPosition((location) => {
    // sets lat/long position to state[array]
    setLocation([location.coords.latitude, location.coords.longitude]);
    });
  };
 

Комментарии:

1. Я попробовал это, и у меня была та же ошибка

2. codesandbox.io/s/cool-hooks-8cxjx?file=/src/App.js

3. и вам нужно разрешить это в вашем браузере 😉

4. Проверил ваш codepen, и это пустой шаблон? Это разрешено в моем браузере.

5. извините, не был сохранен, попробуйте еще раз 🙂