javascript - 单击新的后如何清除以前的传单层
问题描述
所以图层上有舔功能
layer.on({
click: (event) => {
event.target.setStyle({
color: "black",
weight: 1.5,
});
},
});
当我点击新区域时,我只会得到 2 个带有这样边框的区域,但只需要选择新区域,然后删除以前的区域。有人可以帮忙吗?
这是我如何使用geoJSON的代码
<MapContainer center={getCenter()} zoom={getZoom()}>
<GeoJSON
ref={geoJSON}
center={getCenter()}
zoom={getZoom()}
style={setColor}
data={germanyDis}
onEachFeature={onEachArea}
/>
</MapContainer>
这是我的onEachArea
功能
const onEachArea = (area, layer) => {
layer.on({
click: (event) => {
event.target.setStyle({
color: "black",
weight: 1.5,
});
event.target.bringToFront();
},
});
解决方案
所以修复了这个问题。创建了一个usePrevious
挂钩来存储先前的目标值并在useEffect
挂钩中使用它
const [selectedFeature, setSelectedFeature] = useState(null);
const previousFeature = usePrevious(selectedFeature);
useEffect(() => {
if (previousFeature) {
previousFeature.setStyle({ color: "transparent", weight: 0 });
}
}, [selectedFeature]);
在 onEachFeature 函数中只需设置当前值
const onEachArea = (area, layer) => {
layer.on({
click: (event) => {
event.target.setStyle({
color: "black",
weight: 1.5,
});
event.target.bringToFront();
setSelectedFeature(event.target);
},
});
}
};
推荐阅读
- php - 如何在 woocommerce 中添加 iframe 支付网关?
- events - CQRS 事件溯源和每个微服务自己的数据库
- html - 如何创建全宽 svg 矩形背景?
- r - $p.value 函数等价于 $r.squared 函数
- amazon-web-services - 与 lambda 所在区域相关的 AWS lambda.invoke 函数有哪些限制?
- google-cloud-platform - Google 部署管理器 - BigTable 示例
- google-analytics - 使用 Google 登录在 Google Analytics(分析)中进行转化跟踪
- typescript - 如何在 TypeScript 中增量创建类型保存对象
- python-3.x - 重新分配使用类创建的一系列 tkinter 按钮的“命令”部分
- yii2 - 在 yii2 中更新表单时避免用户名验证出现“用户名已经存在”错误