#reactjs #setstate #use-state #google-maps-react
#reactjs #setstate #use-state #google-карты-реагировать
Вопрос:
Я впервые использую Google Maps API, и мне наконец удалось вывести карту на экран, сейчас я работаю над добавлением маркеров местоположений, которые я получаю из других мест в своем приложении. Когда я перебираю местоположения, чтобы получить их соответствующие координаты lat и lng, я хочу добавить их в свою переменную состояния. В настоящее время у меня есть свой код, я получаю ответ, и он сохраняется в моей переменной состояния, но он хранит только самую последнюю, а не все из них.
Каков наилучший способ добавить все эти отдельные ответы от API в мою переменную состояния?
Вот мой код на данный момент
export const MapRender =(props) => {
const {logs} = useContext(LogContext)
const [latLong, setLatLong] = useState([])
useEffect(()=>{
logs.map(l =>{
return fetch(`https://api.opencagedata.com/geocode/v1/json?q=${l.location}amp;key=MYKEYamp;limit=1`)
.then(res => res.json())
.then(parsedRes => setLatLong([parsedRes.results[0].geometry]))
})
},[logs])
console.log(latLong) --- returns a separate log for each response object, I want it to return one array with all responses
Ответ №1:
Обновлено
Я не уловил этого, когда впервые ответил, наличие этого цикла, который задает состояние на каждой итерации, приводит к тому, что множество рендеров ставится в очередь, что приводит к тому, что последний входящий ответ будет преобладать.
Решение состоит в том, чтобы сохранить все ответы в одном массиве, и когда все они будут завершены, вы можете установить состояние. Возможно, вы захотите использовать это, чтобы узнать, когда все обещания выполнены, а затем установить состояние.
Комментарии:
1. Кажется, я все еще получаю только один объект в своем массиве состояний, когда я консольный журнал после нажатия каждого ответа, я все еще получаю отдельный журнал для каждого вызова
2. Да, мой плохой, я не видел этого раньше, я обновлю свой ответ