状态切换时功能组件事件仍然有效 - REACT MAPBOX

Functional component event is still active when state is toggled - REACT MAPBOX

我正在尝试构建一个应用程序,您可以在其中通过单击 navitems 来切换效果。

在导航项上,我有一个切换状态的事件侦听器

const [marker, setMarker] = useState(false);

onClick={() => setMarker(!marker)}

想法是当它设置为 true 时,您可以在地图上单击以设置航路点。当它为 false 时,点击会执行默认行为。

我试过使用这样的 if 语句

    if (marker) {
      map.current.on('click', (e) => {
        new mapboxgl.Marker().setLngLat(e.lngLat).addTo(map.current);
        // Create a new marker.
      });
    }

无论状态是true还是false,第一次切换后仍然可以放置航点。

有人可以告诉我我在这里缺少什么吗?我知道这是愚蠢的事情。

我刚开始用React Hooks的时候遇到过同样的问题! 别担心,那是因为您没有用于删除为 map Ref 添加的 click 事件的代码! 所以你只需要清除地图对象的 click 事件!

useEffect(() => {
    function clickHandler(e) {
        new mapboxgl.Marker().setLngLat(e.lngLat).addTo(map.current);
        // Create a new marker.
    }
    if (marker) {
        map.current.on('click', (e) => {
            clickHandler(e)
        });
    }
    return () => {
        map.current.removeEventListener('click', clickHandler)
    }
}, [marker]);

请试试这个方法..祝你好运..