如何知道反应传单弹出窗口何时关闭
How to know when a react-leaflet popup is closed
我有一张 'leaflet-react' 地图,上面有一些标记。单击标记时,将打开一个弹出窗口。当您单击离开或关闭弹出窗口时,我需要知道它何时关闭,以便判断它是否打开。
标记生成类似于下面的代码。 Marker和Popup来自'react-leaflet',SiteForm是我的代码。
var markers = this.props.sites.map((item, i) => {
<Marker icon={icon} key={i} position={{ lng: co[0], lat: co[1] }}>
<Popup>
<SiteForm item={item} />
</Popup>
</Marker>
}
在 Siteform 的 componentDidMount 中,我可以知道弹出窗口何时打开,但关闭弹出窗口时不会触发 componentWillUnmount。
我试过扩展 Marker,但这是不好的做法,而且我无法从 Marker Symbol 扩展。我也尝试过将 Popup 包装在一个组件中,但是当页面加载未打开弹出窗口时,componentDidMount 在每个标记上运行。
Layer.popupclose
event 可以用来解决这个问题,
Fired when a popup bound to this layer is closed
如果 react-leaflet
library popupclose
事件可以像这样附加到地图组件:
const MapComponent = props => {
const { zoom, center } = props;
const handlePopupClose = (e) => {
console.log(e.popup)
}
return (
<div>
<Map center={center} zoom={zoom} onPopupClose={handlePopupClose}>
<TileLayer url="https://{s}.tile.osm.org/{z}/{x}/{y}.png" />
<Marker position={center}>
<Popup>
<div>Australia</div>
</Popup>
</Marker>
</Map>
</div>
);
}
我有一张 'leaflet-react' 地图,上面有一些标记。单击标记时,将打开一个弹出窗口。当您单击离开或关闭弹出窗口时,我需要知道它何时关闭,以便判断它是否打开。
标记生成类似于下面的代码。 Marker和Popup来自'react-leaflet',SiteForm是我的代码。
var markers = this.props.sites.map((item, i) => {
<Marker icon={icon} key={i} position={{ lng: co[0], lat: co[1] }}>
<Popup>
<SiteForm item={item} />
</Popup>
</Marker>
}
在 Siteform 的 componentDidMount 中,我可以知道弹出窗口何时打开,但关闭弹出窗口时不会触发 componentWillUnmount。
我试过扩展 Marker,但这是不好的做法,而且我无法从 Marker Symbol 扩展。我也尝试过将 Popup 包装在一个组件中,但是当页面加载未打开弹出窗口时,componentDidMount 在每个标记上运行。
Layer.popupclose
event 可以用来解决这个问题,
Fired when a popup bound to this layer is closed
如果 react-leaflet
library popupclose
事件可以像这样附加到地图组件:
const MapComponent = props => {
const { zoom, center } = props;
const handlePopupClose = (e) => {
console.log(e.popup)
}
return (
<div>
<Map center={center} zoom={zoom} onPopupClose={handlePopupClose}>
<TileLayer url="https://{s}.tile.osm.org/{z}/{x}/{y}.png" />
<Marker position={center}>
<Popup>
<div>Australia</div>
</Popup>
</Marker>
</Map>
</div>
);
}