【问题标题】:react-google-maps: multiple info windows opening upreact-google-maps:打开多个信息窗口
【发布时间】:2018-06-18 05:46:49
【问题描述】:

这可能是一个愚蠢的简单反应问题,但请多多包涵。 我正在尝试使用带有信息窗口的多个标记运行react-google-maps。代码如下:

const MapWithADirectionsRenderer = compose(
    withProps({
        googleMapURL: "https://maps.googleapis.com/maps/api/js?key=AIzaSyDf-yIqxErTkbWzKhLox7nAANnrfDIY190&libraries=geometry,drawing,places",
        loadingElement: <div style={{ height: `100%` }} />,
        containerElement: <div style={{ height: `800px` }} />,
        mapElement: <div style={{ height: `100%` }} />,
    }),
    withStateHandlers(() => ({
        isOpen: false,
    }), {
        onToggleOpen: ({ isOpen }) => () => ({
            isOpen: !isOpen,
        })
    }),
    withScriptjs,
    withGoogleMap,
    })
)(props =>
    <GoogleMap
        defaultZoom={13}
        defaultCenter={new google.maps.LatLng(42.357064, -71.062577)}
    >

        <Marker
            position={{ lat: 42.3381437, lng: -71.0475773 }}
            onClick={props.onToggleOpen}
        >
            {props.isOpen && <InfoWindow onCloseClick={props.onToggleOpen}>
                <h3>South Boston</h3>
            </InfoWindow>}
        </Marker>
        <Marker
            position={{ lat: 42.3875968, lng: -71.0994968 }}
            onClick={props.onToggleOpen}
        >
            {props.isOpen && <InfoWindow onCloseClick={props.onToggleOpen}>
                <h3>Somervil</h3>
            </InfoWindow>}
        </Marker>

        {props.directions && <DirectionsRenderer directions={props.directions} />}
    </GoogleMap>
);

当我单击其中一个标记时,所有标记的信息窗口都会打开。如何切换打开我点击的标记的信息窗口?

【问题讨论】:

    标签: reactjs react-google-maps


    【解决方案1】:

    我建议引入一个组件:

    class MarkerWithInfoWindow extends React.Component {
    
        constructor() {
            super();
            this.state = {
                isOpen: false
            }
            this.onToggleOpen = this.onToggleOpen.bind(this);
        }
    
        onToggleOpen() {
            this.setState({
                isOpen: !this.state.isOpen
            });
        }
    
        render() {
            return (<Marker
                position={this.props.position}
                onClick={this.onToggleOpen}>
                {this.state.isOpen && <InfoWindow onCloseClick={this.onToggleOpen}>
                    <h3>{this.props.content}</h3>
                </InfoWindow>}
            </Marker>)
        }
    }
    

    通过MarkerWithInfoWindow state 控制每个标记的信息窗口:

     <GoogleMap
        defaultZoom={13}
        defaultCenter={new google.maps.LatLng(42.357064, -71.062577)}>
    
        <MarkerWithInfoWindow position={{ lat: 42.3381437, lng: -71.0475773 }} content="South Boston" />
        <MarkerWithInfoWindow position={{ lat: 42.3875968, lng: -71.0994968 }} content="Somervil" />
    
    </GoogleMap>
    

    Demo

    【讨论】:

      猜你喜欢
      • 2018-04-06
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 2016-02-16
      • 2013-02-13
      • 2011-03-31
      • 1970-01-01
      • 2019-08-04
      相关资源
      最近更新 更多