【问题标题】:Display InfoView React Google Maps显示 InfoView React 谷歌地图
【发布时间】:2018-03-02 08:43:44
【问题描述】:

我的代码有问题。 我想在单击标记时显示 InfoWindow,但实际上所有标记都会自动打开(如果 showInfo 属性设置为 false),而不是在单击每个标记时显示。

有return方法,因为我需要把所有这些代码放在我组件的render方法中。

const markers = this.props.markers.map((venue, i) => {

        const marker = {

            showInfo: false,

            position: {
                lat: venue.location.lat,
                lng: venue.location.lng
            },

            name: venue.name,

            handleMarkerTap(marker) {

                if (marker.showInfo === false) {
                    marker.showInfo = true
                } else if (marker.showInfo === true) {
                    marker.showInfo = false
                }

                console.log(marker.showInfo);
            }
        };


        return(

            <Marker key={i} onClick={marker.handleMarkerTap(marker)} {...marker} >

                {marker.showInfo && (

                    <InfoWindow
                        onCloseClick={marker.handleMarkerTap(marker)} >

                            <div>
                                <b>{marker.name}</b>
                            </div>


                    </InfoWindow>
                )}

            </Marker>
        )
    });

谢谢。

【问题讨论】:

    标签: reactjs google-maps maps marker infowindow


    【解决方案1】:

    您是否在筛选要使用 id 切换的标记信息窗口?你需要做这样的事情。

      onToggleInfo = id => {
        const new_locations = this.state.locations.map(
          location =>
            id === location.id
              ? { ...location, info_open: !location.info_open }
              : { ...location, info_open: false }
        );
        this.setState({ locations: new_locations });
      };
    

    【讨论】:

    • 不,我不知道在哪里做。你可以帮帮我吗?谢谢..我可以给你我的电子邮件地址
    • 我看到了你的整个代码。你越来越近了!问题是,我认为您没有正确传递 targetMarker。试试 console.logging targetMarker。以防万一,这是我的 (github.com/Tetsuya3850/MERN-Sprint/tree/master/gmap/client/src)
    • 访问 targetMarker 我曾经使用过 ref (reactjs.org/docs/refs-and-the-dom.html) 但我认为 id 方法更简单。
    • 问题解决了吗?如果是这样,请通过接受表明这个问题是可以的。
    • 太棒了!如何表明答案已解决在这里 (meta.stackexchange.com/questions/147531/…) 嗯,当然,但我认为这不是这里的工作方式。您可以在 Stack Overflow 上将该问题作为新问题发布。不是私人聊天!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多