使用React状态,如何在添加新标记之前从Google地图中删除标记?

迈克尔·林奇

我有一个React应用程序,其中显示了带有一些标记的地图。通过单击可从Google Maps API获取新位置的按钮来刷新地图标记。我想在每次刷新时从地图上删除以前的位置标记。

import React, { useEffect, useState } from 'react';

function Map(props) {
  const [markers, setMarkers] = useState();

  function clearMarkers() {
    for(let i = 0; i < markers.length; i++) {
      markers[i].setMap(null);
    }
  }

  useEffect(() => {

    clearMarkers();

    if(props.locations.length) {
      const googleMarkers = [];

      for(let i = 0; i < props.locations.length; i++) {
        const marker = new window.google.maps.Marker({...});
        googleMarkers.push(marker);
      }

      setMarkers(googleMarkers);
    }
  }, [props.locations, props.map]);
}

我已经工作了,但是我收到了React的警告。

React Hook useEffect缺少依赖项:'clearMarkers'。包括它或删除依赖项数组

我需要依赖项数组,因此标记仅在有new时才刷新props.locations,但是当我将其包括在依赖项数组中时,会出现无限循环。

如何在添加新标记之前清除标记,而不用React发出警告还是我不应该担心警告?

瓦迪姆·格雷米亚切夫(Vadim Gremyachev)

您可以考虑通过可变的ref对象存储标记如此处所述):

const prevMarkersRef = useRef([]);

区分以前的标记。locations道具更新后,清除先前的标记

useEffect(() => {
    //clear prev markers 
    clearMarkers(prevMarkersRef.current); 

    //render markers
    for (let loc of props.locations) {
      const marker = createMarker({ lat: loc.lat, lng: loc.lng }, map);
      prevMarkersRef.current.push(marker);
    }
});

哪里

function createMarker(position, map) {
    return new window.google.maps.Marker({
      position: position,
      map: map
    });
  }

  function clearMarkers(markers) {
    for (let m of markers) {
      m.setMap(null);
    }
  }

这是一个演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Google地图中添加新标记之前删除先前的标记

来自分类Dev

如何在Google地图中添加标记

来自分类Dev

如何在Google标记地图中添加地址?

来自分类Dev

如何在Google地图中旋转标记?

来自分类Dev

如何在Google地图中添加新圈子之前自动删除上一个圈子

来自分类Dev

在Google地图中添加标记

来自分类Dev

在添加新标记之前删除先前的标记

来自分类Dev

如何在添加新标记和图层之前清除所有标记和图层的传单地图?

来自分类Dev

如何在传单地图中删除传单标记窗格?

来自分类Dev

如何在传单地图中删除传单标记窗格?

来自分类Dev

如何在Android上的ArcGIS地图中添加标记?

来自分类Dev

如何在Objective-C(iOS)的“ Google地图”视图中添加标记

来自分类Dev

在Google地图中添加标记-Flutter

来自分类Dev

如何在html中的Google地图中自动标记区域?

来自分类Dev

如何使用Mapbox SDK在离线地图中添加标记

来自分类Dev

在更新位置之前,先从Google地图中删除特定标记

来自分类Dev

如何在Google地图上的标记上删除clusterMark?

来自分类Dev

如何在Google地图上添加标记-javascript

来自分类Dev

使用HTML和JavaScript代码在Leaflet中添加新标记之前,请删除以前的标记

来自分类Dev

如何使用Kotlin在Google地图上添加标记?

来自分类Dev

如何在React Native的应用程序地图中获取传统的蓝色地图标记?

来自分类Dev

标记消失在Google地图中

来自分类Dev

在列表和地图上添加标记,但无法在循环时从地图中删除这些标记

来自分类Dev

使用按钮在Google地图上添加标记

来自分类Dev

在Google地图中通过其ID删除标记组

来自分类Dev

在Google地图中按纬度/经度删除标记

来自分类Dev

无法在Google地图中添加多个标记

来自分类Dev

如何在不删除先前标记的情况下添加新标记?

来自分类Dev

如何在此处地图中添加自定义图像标记?

Related 相关文章

  1. 1

    在Google地图中添加新标记之前删除先前的标记

  2. 2

    如何在Google地图中添加标记

  3. 3

    如何在Google标记地图中添加地址?

  4. 4

    如何在Google地图中旋转标记?

  5. 5

    如何在Google地图中添加新圈子之前自动删除上一个圈子

  6. 6

    在Google地图中添加标记

  7. 7

    在添加新标记之前删除先前的标记

  8. 8

    如何在添加新标记和图层之前清除所有标记和图层的传单地图?

  9. 9

    如何在传单地图中删除传单标记窗格?

  10. 10

    如何在传单地图中删除传单标记窗格?

  11. 11

    如何在Android上的ArcGIS地图中添加标记?

  12. 12

    如何在Objective-C(iOS)的“ Google地图”视图中添加标记

  13. 13

    在Google地图中添加标记-Flutter

  14. 14

    如何在html中的Google地图中自动标记区域?

  15. 15

    如何使用Mapbox SDK在离线地图中添加标记

  16. 16

    在更新位置之前,先从Google地图中删除特定标记

  17. 17

    如何在Google地图上的标记上删除clusterMark?

  18. 18

    如何在Google地图上添加标记-javascript

  19. 19

    使用HTML和JavaScript代码在Leaflet中添加新标记之前,请删除以前的标记

  20. 20

    如何使用Kotlin在Google地图上添加标记?

  21. 21

    如何在React Native的应用程序地图中获取传统的蓝色地图标记?

  22. 22

    标记消失在Google地图中

  23. 23

    在列表和地图上添加标记,但无法在循环时从地图中删除这些标记

  24. 24

    使用按钮在Google地图上添加标记

  25. 25

    在Google地图中通过其ID删除标记组

  26. 26

    在Google地图中按纬度/经度删除标记

  27. 27

    无法在Google地图中添加多个标记

  28. 28

    如何在不删除先前标记的情况下添加新标记?

  29. 29

    如何在此处地图中添加自定义图像标记?

热门标签

归档