У меня есть компонент Map в моем проекте React, который получает информацию о текущем отеле и должен получить и представить местоположение отеля на карте Google Map React.
Это код моего компонента MapView.jsx:
import React, { useState, useEffect } from 'react';
import GoogleMapReact from 'google-map-react';
import MapMarker from "../../../public/svg/MapMarker.svg";
const AnyReactComponent = ({ text }) => (
<div className='map-marker'>
<div className='chat-box'>
<p>{text}</p>
<div className = "chat-arrow"></div>
</div>
<img src = {MapMarker} alt = "Map Marker" />
</div>
);
export function MapView({ stay }) {
const [defaultProps, setDefaultProps] = useState({
center: { lat: 32.5, lng: 34.9 },
zoom: 15
});
const handleApiLoaded = (map, maps) => {
// use map and maps objects
};
useEffect(() => {
if (stay && stay.loc && stay.loc.lat && stay.loc.lng) {
setDefaultProps({
center: { lat: stay.loc.lat, lng: stay.loc.lng },
zoom: 15
});
}
}, [stay]);
return (
<div className = "map-container">
<h2>Where you'll be</h2>
<p>{stay.loc.address}</p>
<div style = {{ height: '400px', width: '100%' }}>
<GoogleMapReact
bootstrapURLKeys = {{ key: "AIzaSyDMl5nCzylGqvy3ogV2cL1CIxCl7X1b0vQ" }}
center = {defaultProps.center}
defaultZoom = {defaultProps.zoom}
yesIWantToUseGoogleMapApiInternals
onGoogleApiLoaded = {({ map, maps }) => handleApiLoaded(map, maps)}
>
<AnyReactComponent
lat = {defaultProps.center.lat}
lng = {defaultProps.center.lng}
text = "Exact location provided after booking."
/>
</GoogleMapReact>
</div>
<a href = "#" className = "show-more">Show more</a>
</div>
);
}
При загрузке проживания я хочу, чтобы местоположение изменилось на местоположение отеля, но код приводит к тому, что карта не отображается, и возникает эта ошибка:
Почему отображается эта ошибка? регистрация местоположения пребывания перед использованием setDefaultProps ясно показывает, что они определены, поэтому я не понимаю, почему существует NaN.
Есть ли функция ChangeCenter или updateCenter, которой мне не хватает? Я застрял на этом несколько дней и не могу найти ответ в документации...
ОБНОВЛЯТЬ: это данные о проживании.
Тип Stay.loc.lat и lng — это номер.
Конечно, обновил его в вопросе :)
Похоже, проблема возникает, когда значение lat выходит за пределы допустимого диапазона. Его значение должно быть между [-90, 90], как показано в документации: Developers.google.com/maps/documentation/javascript/reference/…. При попытке установить значение больше 90 или меньше -90 выдается эта ошибка. Итак, вы можете добавить туда оператор if, чтобы проверить, находится ли значение в диапазоне или нет.
Как описано здесь: Developers.google.com/maps/documentation/javascript/reference/…, вы можете автоматически установить значение 90 или -90, если оно выходит за пределы диапазона.
@OnurDoğan УДИВИТЕЛЬНО! Они дали его для использования в демо-данных, поэтому я подумал, что значения там действительны... большое спасибо, теперь все работает :)))))



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Благодаря подсказке @Onur Doğan я изменил значения широт на менее 90 или больше -90, и это устранило проблему :)
Проблема связана со значением lat, поскольку оно выходит за пределы допустимого диапазона. Значение lat должно находиться в диапазоне [-90, 90], как показано в Документации Google Map. Поэтому при попытке установить значение, выходящее за пределы диапазона([-90,90]), выдается эта ошибка.
Чтобы устранить эту проблему, проверьте, выходит ли значение lat за пределы диапазона, и если оно выходит за пределы диапазона, автоматически установите для него максимальное (90) или минимальное (-90) значение, как показано в документации
Надеюсь, понятно и полезно
Можете ли вы поделиться значениями объекта
stay?