渲染反应 - 反应 - 传单上反应 - 传单 - 绘制绘制层的弹出窗口内的组件

时间:2017-03-20 02:13:22

标签: reactjs react-leaflet

我尝试在由react-leaflet-draw创建的图层中渲染一些反应组件。

这是我的尝试:

_onCreate(e) {
        var layer = e.layer
        layer.bindPopup(
            <Content>
                <Label>Flower Name</Label>
                <Input type="text" placeholder="Flower Name"/>
                <Label>Flower Index</Label>
                <Input type="number" placeholder="Flower Index"/>
                <Label>Flower Radius</Label>
                <Input type="number" placeholder="Flower Radius"/>
                <Button color="isSuccess" >Add Flower</Button>
            </Content>
        )
    }

组件由react-bulma提供。

但我尝试这种方法我收到以下错误: Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'

如果我将内容设为一个简单的字符串,我会得到纯HTML字段和一个按钮但不能访问外部函数或实际的Bulma组件。

基本上我希望能够在数据库中保存新形状。

从简短的在线搜索看来,这似乎是react-leaflet的限制,但我想先在这里查看。

另外,这是为新创建的形状设置弹出窗口的最佳方法吗?我很难将常规leaflet-draw方法转换为react-leaflet-draw

1 个答案:

答案 0 :(得分:2)

可以在反应小册子Popup中包含反应组分。在您的示例中,您使用的是传单的API,而您应该使用react-leaflet的组件。请参阅以下在单击地图后显示弹出窗口的示例:

const React = window.React;
const { Map, TileLayer, Marker, Popup } = window.ReactLeaflet;

let numMapClicks = 0

class SimpleExample extends React.Component {
    state = {}

  addPopup = (e) => {
    this.setState({
      popup: { 
        key: numMapClicks++,
        position: e.latlng
      }
    })
  }

  handleClick = (e) => {
    alert('clicked')
  }

  render() {
    const {popup} = this.state
    return (
      <Map 
        center={[51.505, -0.09]} 
        onClick={this.addPopup}
        zoom={13} 
        >
        <TileLayer
          attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
          url='http://{s}.tile.osm.org/{z}/{x}/{y}.png'
        />
        {popup &&
          <Popup 
            key={`popup-${popup.key}`}
            position={popup.position}
            >
            <div>
              <p>A pretty CSS3 popup. <br/> Easily customizable.</p>
              <button onClick={this.handleClick}>Click Me!</button>
            </div>
          </Popup>
        }
      </Map>
    );
  }
}

window.ReactDOM.render(<SimpleExample />, document.getElementById('container'));

这是一个jsfiddle来演示。