反应传单标记点击的任意功能

not*_*ing 7 leaflet reactjs react-leaflet

React-leaflet 很好地提供了将内容放入Popup标记中的能力。

例如在我的例子中:

            <Marker position={[item.lat, item.lng]} key={item.machineid}>
              <Popup maxWidth={720}>
                <ItemGrid machineid={item.machineid}
                          username={this.props.username}/>
              </Popup>
            </Marker>
Run Code Online (Sandbox Code Playgroud)

但是,如果此内容太大,则可能会很笨拙,尤其是在移动设备上。我想在单击标记时激活(引导程序)模态界面。有没有办法在反应传单中做到这一点?

Sel*_*rim 16

更新: 事件行为#

使用 Marker 组件内的 eventHandlers 侦听器函数:

<Marker
  position={[50.5, 30.5]}
  eventHandlers={{
    click: (e) => {
      console.log('marker clicked', e)
    },
  }}
/>
Run Code Online (Sandbox Code Playgroud)

  • 希望我能+5这个(昨天当我失去理智时发现了它) (3认同)

not*_*ing 1

我发现了一种黑客方法,可以通过点击标记来执行任意操作。(1)保留弹出窗口,但让它的内容做任何你喜欢的事情(例如默认打开模式)和(2)用CSS隐藏弹出窗口的容器div。

就我而言,它看起来像这样:地图视图,保持不变:

<Marker position={[item.lat, item.lng]} key={item.machineid}>
    <Popup maxWidth={720}>
      <ItemGrid machineid={item.machineid}
                         username={this.props.username}/>
    </Popup>
</Marker>
Run Code Online (Sandbox Code Playgroud)

然后,之前在弹出窗口中的 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>
Run Code Online (Sandbox Code Playgroud)

最后在传单 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
    }
Run Code Online (Sandbox Code Playgroud)