response-google-maps не отключает компоненты в режиме StrictMode - PullRequest
0 голосов
/ 11 октября 2018

В прилагаемом примере кодов и ящика у меня есть карта, использующая react-google-maps.Если обернуть карту <React.StrictMode>, она прекратит размонтирование компонентов.

Я вижу способ, которым реактив-google-карты отключает компоненты, обычно устанавливая их карту в нуль, используя: instance.setMap(null).Я не понимаю, почему это поведение должно нарушаться при StrictMode.

Вот коды и окно, которое демонстрирует проблему: https://codesandbox.io/s/jv61orz64y

Спасибо!
Uri

1 Ответ

0 голосов
/ 17 октября 2018

У меня была такая же проблема, и я столкнулся с вашей проблемой в репо и, следовательно, с этим вопросом.Я подробно остановился на этом вопросе как комментарий к вашей проблеме репо , но подведу итог для SO:

  • response-google-maps немного непослушный и на самом деле делает некоторыерендеринг-работа в конструкторе компонентов.В этом случае он инициализирует google.maps.Marker и вызывает setMap.Это приводит к тому, что маркер наносится на карту.
  • удаляет маркеры с карты в componentWillUnmount
  • компонент может быть построен, но никогда не заканчиваетсяБудучи mounted, когда это происходит, componentWillUnmount никогда не вызывается, так как ничего не смонтировано для демонтирования
  • , это означает, что если компонент создан, но никогда не монтируется, и, следовательно, componentWillUnmount никогда не вызывается,маркер никогда не удаляется с карты
  • в StrictMode, эта точная ситуация, кажется, происходит, см. объяснение ниже:

Если вы посмотрите на мой форк вашей демонстрации вы увидите, что в нестрогом режиме прокси-маркер (MyMarker) создается, монтируется, обновляется, демонтируется и затем перемонтируется, если вы загружаете страницу с увеличением, а затем с уменьшением масштаба.Однако в строгом режиме создаются два маркера, но монтируется только один.Так что здесь происходит не то, что маркер никогда не отключается при увеличении, а то, что на карте всегда есть два маркера.Тот, который становится «осиротевшим» на карте, будучи созданным, но никогда не смонтированным, и тот, который полностью находится под контролем Реакта.Это действительно удаляется и добавляется правильно.

...