Проблема при подключении Yandex Maps API к React приложени: ymaps3: already defined?

Ошибка возникает при подключении ymaps3 к react приложению. App.js:

import React from "react";

import {
    YMap,
    YMapComponentsProvider,
    YMapDefaultSchemeLayer,
    YMapDefaultFeaturesLayer,
    YMapListener,
    YMapFeature,
    YMapCollection,
    YMapControls,
    YMapGeolocationControl,
    YMapZoomControl,
    YMapHint,
    YMapDefaultMarker,
    YMapContainer,
    YMapControlButton,
} from "ymap3-components";

function Map() {
    return (
        <YMapComponentsProvider apiKey={'myKey'}>
            <YMap location={{center: [37.95, 55.65], zoom: 10}}>
                <YMapDefaultSchemeLayer />
                <YMapDefaultFeaturesLayer />
                <YMapDefaultMarker
                    coordinates={[37.95, 55.65]}
                />
            </YMap>
        </YMapComponentsProvider>
    );
}

export default Map;

При загрузке страницы появляется ошибка "ymaps3: already defined". Вообще не понимаю, что не так(

package.json

{
  "name": "ball",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.17.0",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-scripts": "5.0.1",
    "web-vitals": "^2.1.4",
    "ymap3-components": "^1.1.3"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

Ответы (1 шт):

Автор решения: Daniil Loban

После воспроизведения у себя данной проблемы и исследовав ее, я понял что причина в React — как известно в developer mode он рендерит компоненты дважды. Это проявляется в том что в инспекторе dev-tools можно увидеть 2 одинаковых скрипта Яндекс Карт, но причина не только в скриптах, а глубже (в коде API который к тому же находится на их серверах). При билде проекта в production mode эта ошибка никак не проявляется.

В информации о модуле ymap3-components есть ссылка на их песочницу Я в новом проекте использовал именно их код, так как он как минимум выводит карту, но ошибка все равно всплывает поверх и ее приходится закрывать.

введите сюда описание изображения

Есть способ убедить React не делать рендер дважды, но я бы использовал его временно — это удалить строгий режим (React.StrictMode) из рендера:

root.render(
   ̶<̶R̶e̶a̶c̶t̶.̶S̶t̶r̶i̶c̶t̶M̶o̶d̶e̶>̶
    <App />
   ̶<̶/̶R̶e̶a̶c̶t̶.̶S̶t̶r̶i̶c̶t̶M̶o̶d̶e̶>̶
);

Тут можно почитать о плюсах и минусах такого решения.

→ Ссылка