マーカーをタップすると、任意のアクションを実行するハックのようなものを見つけました。(1) ポップアップを保持しますが、そのコンテンツを好きなようにします (例: デフォルトでモーダルを開く)。(2) ポップアップのコンテナー div を CSS で非表示にします。
私の場合、次のように見えました: マップ ビューは変更されません:
<Marker position={[item.lat, item.lng]} key={item.machineid}>
<Popup maxWidth={720}>
<ItemGrid machineid={item.machineid}
username={this.props.username}/>
</Popup>
</Marker>
次に、以前は pop にあった ItemGrid がモーダルを含むように変更されます。(ここでは、reactstrap コンポーネントを使用し、モーダルをtrue
コンポーネントのマウント時に設定します。):
class ItemGrid extends Component {
constructor(props){
super(props);
this.state = {modal:false}
this.toggle = this.toggle.bind(this);
}
toggle() {
this.setState({
modal: !this.state.modal
});
}
componentDidMount() {
this.setState({modal:true})
}
render() {
return (
<div>
<Modal isOpen={this.state.modal} toggle={this.toggle} className={this.props.className}>
<ModalHeader toggle={this.toggle}>Modal Header</ModalHeader>
<ModalBody>
{ContentThatWasPreviouslyInPopup}
</ModalBody>
</Modal>
</div>
そして最後にリーフレット CSS で:
.leaflet-container a.leaflet-popup-close-button {
position: absolute;
top: 0;
right: 0;
padding: 8px 8px 0 0;
text-align: center;
width: 0px;
height: 0px;
font: 0px/0px Tahoma, Verdana, sans-serif; //DANGEROUS HACK
color: #c3c3c3;
text-decoration: none;
font-weight: bold;
background: transparent;
}
.leaflet-popup-content-wrapper {
padding: 1px;
text-align: left;
border-radius: 12px;
width: 0px // DANGEROUS HACK
}