Juniorrrrr
@Juniorrrrr

Как правильно устанавливать точки на яндекс карту с Reactjs?

Всем привет.Пытаюсь инициализировать карту яндекса, и при клике на кнопку устанавливаю точку.

Установка точки происходит долго, карта становится неюзабельной, перестает реагировать на мышь.

Подскажите пожалуйста, что я делаю не так ?

Пример можно глянуть здесь

export default function App() {
  const [isLoaded, setIsLoaded] = React.useState(false);
  const [map, setMap] = React.useState(null);

  function fetchScript(url) {
    return new Promise((resolve, reject) => {
      this.script = document.createElement("script");

      this.script.type = "text/javascript";
      this.script.onload = resolve;
      this.script.onerror = reject;
      this.script.src = `https://api-maps.yandex.ru/2.1/?apikey=86f5784f-3442-4cdf-8c42-205d3c76e368&lang=ru_RU`;
      this.script.async = "async";

      document.head.appendChild(this.script);
    });
  }

  // загрузка скрипта
  React.useEffect(() => {
    fetchScript().then(() => setIsLoaded(true));
  }, []);

  const createMap = () => {
    try {
      ymaps.ready(() => {
        const newMap = new ymaps.Map(
          "customMap",
          { center: [55.76, 37.64], zoom: 9 },
          {
            searchControlProvider: "yandex#search"
          }
        );
        setMap(newMap);
      });
    } catch (error) {
      console.log("error is", error);
    }
  };

  // если скрипт карты подключен, инициализировать карту
  React.useEffect(() => {
    if (isLoaded && !map) {
      createMap();
    }
  }, [isLoaded, map]);

  let counter = 0.1;

  return (
    <>
      <div id="customMap" style={{ height: 300 }}>
        Here will be a map
      </div>

      <button
        style={{ marginTop: 150 }}
        onClick={() => {
          console.log("ymaps", ymaps);
          counter = counter + 0.1;

          var myGeoObject = new ymaps.GeoObject({
            geometry: {
              type: "Point", // тип геометрии - точка
              coordinates: [55.8, 37.07 + counter] // координаты точки
            }
          });

          // Размещение геообъекта на карте.
          map.geoObjects.add(myGeoObject);
        }}
      >
        Create Point
      </button>
    </>
  );
}
  • Вопрос задан
  • 308 просмотров
Решения вопроса 1
Тормозит не ваш код, а codesandbox - он пытается обработать console.log("ymaps", ymaps); - из-за того что ymaps сильно большой и собственной реализации консоли

Замените на console.log("ymaps", !!ymaps);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы