Popup始终在标记中打开

时间:2016-08-02 20:47:05

标签: react-leaflet

有什么方法弹出窗口始终保持打开状态?无需点击它即可打开。

预期行为

https://monosnap.com/file/mPkuSTmPAfwxTxY99YQVA5m96Zolow.png

实际行为

http://take.ms/cUej0

3 个答案:

答案 0 :(得分:3)

for(int index = 0; index < inputChars.Length; index++) { char toBeSubbed = inputChars[index]; int letterIndex = Array.IndexOf(alphabet, toBeSubbed); if(letterIndex>0) inputChars[index] = charsToSubArr[letterIndex]; } 的引入带来了creating custom components方面的重大变化,不再支持通过继承扩展组件(请参考this thread详情)

实际上,React official documentation也建议使用合成代替继承:

  

在Facebook,我们在成千上万的组件中使用React,但我们尚未   发现了建议使用组件的任何用例   继承层次结构。

     

道具和构图为您提供了所需的所有灵活性   以明确且安全的方式自定义组件的外观和行为。   请记住,组件可以接受任意道具,包括   基本值,React元素或函数。

下面的示例演示如何扩展标记组件,以便在显示标记后保持弹出窗口的打开状态:

react-leaflet version 2

说明:

获得对本机传单标记对象(const MyMarker = props => { const initMarker = ref => { if (ref) { ref.leafletElement.openPopup() } } return <Marker ref={initMarker} {...props}/> } 的访问权限,并通过Marker.openPopup method打开弹出窗口

Here is a demo

答案 1 :(得分:2)

以上不再适用于 react-leaflet 版本 3。在您的自定义标记组件中,要获取对传单元素的引用,您现在应该使用 useRef(),然后在 useEffect() 中打开弹出窗口一旦安装了组件。

const MyMarker = (props) => {
  const leafletRef = useRef();
  useEffect(() => {
    leafletRef.current.openPopup();
  },[])
  return <Marker ref={leafletRef} {...props} />
}

答案 2 :(得分:1)

您可以使用永久tooltips,或者React可以为此类事情提供引用...您可以执行以下操作:

https://jsfiddle.net/jrcoq72t/121/

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

class SimpleExample extends React.Component {
  constructor () {
    super()
    this.state = {
      lat: 51.505,
      lng: -0.09,
      zoom: 13
    }
  }

  openPopup (marker) {
    if (marker && marker.leafletElement) {
      window.setTimeout(() => {
        marker.leafletElement.openPopup()
      })
    }
  }

  render () {
    const position = [this.state.lat, this.state.lng]
    return (
      <Map center={position} zoom={this.state.zoom}>
        <TileLayer attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors' url="http://{s}.tile.osm.org/{z}/{x}/{y}.png" />
        <Marker position={position} ref={this.openPopup}>
          <Popup>
            <span>
              A pretty CSS3 popup. <br /> Easily customizable.
            </span>
          </Popup>
        </Marker>
      </Map>
    )
  }
}

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

参考文献:

https://reactjs.org/docs/refs-and-the-dom.html

React.js - access to component methods

Auto open markers popup on react-leaflet map