我想有一个按钮以外的Map,改变了看法,以另一个坐标。
有没有办法让mapContainer示例调用它们的函数?我该如何实现这个功能?
我试着通过使用ref来获得它,但它不起作用。下面是我的当前代码
const zoom = 13;
function Map({ regionCoord, regionName }) {
const mapRef = useRef();
function handleFlyToClick() {
// This don't work
// const map = mapRef.current.leafletElement
// map.flyTo(regionCoord, zoom)
}
return (
<React.Fragment>
<Grid container >
<Grid item xs={10}>
{regionCoord && <MapContainer
ref={mapRef}
center={[50,50]}
zoom={zoom}
>
<TileLayer
attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
<Marker position={regionCoord}>
<Popup>{regionName}</Popup>
</Marker>
</MapContainer>}
</Grid>
<Grid item xs={2}>
<button onClick={handleFlyToClick}>Fly To</button>
</Grid>
</Grid>
</React.Fragment>
)
}
export default Map
我用的是react-leaflet v3
4条答案
按热度按时间ajsxfq5m1#
您需要使用一个组件,其中将包括您的按钮内。使用
MapContainer
的whenCreated
prop来获取map示例。我认为mapRef
在最新版本中不再有效。MapContainer:
使用按钮及其事件创建组件
Demo
qhhrdooz2#
whenCreated
在4.0中已经不存在了,但是有ref
:MapContainer:
bvhaajcl3#
你需要访问map元素(从map组件,它是容器,而不是MapContainer),这是一个非常简单的例子:
uyhoqukh4#
适用于3.x和4.x:
另一种方法是使用
useMap
钩子,它存在于3.x和4.x中。为了在父组件中使用它,您只需要添加一个子组件,例如。MapController
下面。