reactjs - 在 react-leaflet 上的 react-leaflet-draw 绘制层的弹出窗口中渲染 react 组件

标签 reactjs react-leaflet

我正在尝试在由 react-leaflet-draw 创建的层内渲染一些 react 组件.

这是我的尝试:

_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 .

最佳答案

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

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展示。

关于reactjs - 在 react-leaflet 上的 react-leaflet-draw 绘制层的弹出窗口中渲染 react 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42894803/

相关文章:

react-leaflet - 如何在react-leaflet中制作一个椭圆?

javascript - 在 react 中过滤 geojson 的最佳方法?

javascript - 在与 webpack 进行 react 时导入react-leaflet会返回错误

javascript - 将异步函数中的数组添加到传单 react 中不起作用

reactjs - 使用扩展类作为组件时,React 中的菜单 Material UI 组件不起作用

javascript - 你如何在 React 中删除/添加大量按钮(或任何 DOM 元素)的类?

javascript - 如何在不调整 reactjs 背景图像大小的情况下进行缩放

javascript - 如何使用变量和函数调用将 html 字符串解析到 JSX 客户端

javascript - 如何在 React 组件中访问 js 和 jsx 中 map 函数之外的变量

react-leaflet - 弹出窗口总是在市场上开放