У меня была такая же проблема, и я столкнулся с вашей проблемой в репо и, следовательно, с этим вопросом.Я подробно остановился на этом вопросе как комментарий к вашей проблеме репо , но подведу итог для SO:
- response-google-maps немного непослушный и на самом деле делает некоторыерендеринг-работа в конструкторе компонентов.В этом случае он инициализирует google.maps.Marker и вызывает
setMap
.Это приводит к тому, что маркер наносится на карту. - удаляет маркеры с карты в
componentWillUnmount
- компонент может быть построен, но никогда не заканчиваетсяБудучи
mounted
, когда это происходит, componentWillUnmount
никогда не вызывается, так как ничего не смонтировано для демонтирования - , это означает, что если компонент создан, но никогда не монтируется, и, следовательно,
componentWillUnmount
никогда не вызывается,маркер никогда не удаляется с карты - в StrictMode, эта точная ситуация, кажется, происходит, см. объяснение ниже:
Если вы посмотрите на мой форк вашей демонстрации вы увидите, что в нестрогом режиме прокси-маркер (MyMarker) создается, монтируется, обновляется, демонтируется и затем перемонтируется, если вы загружаете страницу с увеличением, а затем с уменьшением масштаба.Однако в строгом режиме создаются два маркера, но монтируется только один.Так что здесь происходит не то, что маркер никогда не отключается при увеличении, а то, что на карте всегда есть два маркера.Тот, который становится «осиротевшим» на карте, будучи созданным, но никогда не смонтированным, и тот, который полностью находится под контролем Реакта.Это действительно удаляется и добавляется правильно.