
[英]Using leaflet and need to update component. How can I update the values in my constructor?
[英]How can I update leaflet route?
所以我有一个带有 leaflet 路由的组件,它看起来像这样:
function LeafletRoutingMachine() {
const map = useMap();
const route = useSelector((state) => state.route.route);
const control = L.Routing.control({
waypoints: [
L.latLng(route.coord_from_lat, route.coord_from_lng),
L.latLng(route.coord_to_lat, route.coord_to_lng),
],
});
const changeRoute = () => {
control.remove();
control.addTo(map);
};
useEffect(() => {
changeRoute();
}, [route]);
return null;
}
export default LeafletRoutingMachine;
我单击带有坐标的不同行的表格,它应该更改 map 上的路线。虽然它起作用了,但我只需要在屏幕上显示一条路线,但现在它绘制了新路线,而以前的路线仍然存在. 我怎样才能从 map 中删除以前的路由?
在向map添加新路由之前,可以通过调用路由控件的remove方法来删除map之前的路由。
以下是如何执行此操作的示例:
function LeafletRoutingMachine() {
const map = useMap();
const route = useSelector((state) => state.route.route);
const control = L.Routing.control({
waypoints: [
L.latLng(route.coord_from_lat, route.coord_from_lng),
L.latLng(route.coord_to_lat, route.coord_to_lng),
],
});
// create a ref to store the previous control
const prevControlRef = useRef(control);
const changeRoute = () => {
//remove the previous control
prevControlRef.current.remove();
//add new control
control.addTo(map);
//update ref
prevControlRef.current = control;
};
useEffect(() => {
changeRoute();
}, [route]);
return null;
}
通过使用 ref prevControlRef 来存储之前的控件,并在添加新控件之前将其删除,它将确保在 map 上一次只显示一个路由。
还需要注意的是,确保在卸载组件时删除控件,您可以使用 useEffect cleanup function 来执行此操作。
useEffect(() => {
changeRoute();
return () => {
prevControlRef.current.remove();
}
}, [route]);
这样,当组件卸载时,控件将从 map 中删除,并且当路由更改时,它将删除以前的路由并添加新路由。
请检查文档
https://www.liedman.net/leaflet-routing-machine/api/
可以在map上设置单控
并使用
control.setWaypoints(// 新点)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.