gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:02:42 24 4
gpt4 key购买 nike

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

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 has a missing dependency: 'clearMarkers'. Either include it or remove the dependency array

我需要依赖数组,所以标记只有在有新的 props.locations 时才会刷新,但是当我将它包含在依赖数组中时,我得到了一个无限循环。

如何在添加新标记之前清除 map 上的标记,React 不会抛出警告?还是我不应该关心这个警告?

最佳答案

您可以考虑通过可变引用对象 ( as described here ) 来存储标记:

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);
}
}

这是一个demo

关于javascript - 使用 React 状态,如何在添加新标记之前从 Google map 中删除标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59338101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com