javascript - 打开标记reactjs onclick

标签 javascript reactjs google-maps

我在我的项目中使用reactjs和谷歌地图

我想显示一些标记,但是当我单击我的标记时,我的所有标记都会出现

我想一次只打开一个标记(onclick) 你能告诉我我的功能出了什么问题吗?

 const MapWithAMakredInfoWindow = compose(
        withStateHandlers(() => ({
            isOpen: false,
        }), {
            onToggleOpen: ({ isOpen }) => () => ({
                isOpen: !isOpen,
            })
        }),

        withScriptjs,
        withGoogleMap
    )(props =>
        <GoogleMap
            defaultZoom={8}
            defaultCenter={{ lat: 44.8350088, lng: -0.5872689999999999 }}
        >

            {this.state.PartenaireData.map(function (item, i) {
                if (item.coordinates.latitude && item.coordinates.longitude)
                    return (
                        <Marker
                            position={{ lat: item.coordinates.latitude, lng: item.coordinates.longitude }}
                            onClick={props.onToggleOpen}
                            key={i}
                        >
                            { (props.isOpen ) &&
                            <InfoWindow  onCloseClick={props.onToggleOpen}>
                                <div>
                                    <div>{item.titre}</div>
                                    <div >autre data</div>
                                </div>
                            </InfoWindow>}
                        </Marker>)
            })}


        </GoogleMap>
    );

最佳答案

isOpenonToggleOpen 应该是 Marker 的属性,而不是 GoogleMap

通过将它们传递给 GoogleMap,您将它们设为全局(所有标记都相同)。因此,将 isOpen 设置为 true 将打开所有标记。

可能是这样的

const MapWithAMakredInfoWindow = compose(
    withScriptjs,
    withGoogleMap
)(props =>
    <GoogleMap
        defaultZoom={8}
        defaultCenter={{ lat: 44.8350088, lng: -0.5872689999999999 }}
    >

        {this.state.PartenaireData.map(function (item, i) {
            if (item.coordinates.latitude && item.coordinates.longitude)
                return (
                    compose(
                        withStateHandlers(() => ({
                            isOpen: false,
                        }), {
                            onToggleOpen: ({ isOpen }) => () => ({
                                isOpen: !isOpen,
                            })
                        })
                    )(markerProps =>
                        <Marker
                            position={{ lat: item.coordinates.latitude, lng: item.coordinates.longitude }}
                            onClick={markerProps.onToggleOpen}
                            key={i}
                        >
                            {(markerProps.isOpen) &&
                                <InfoWindow onCloseClick={markerProps.onToggleOpen}>
                                    <div>
                                        <div>{item.titre}</div>
                                        <div >autre data</div>
                                    </div>
                                </InfoWindow>}
                        </Marker>
                    )
                );
        })}
    </GoogleMap>
);

关于javascript - 打开标记reactjs onclick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50607875/

相关文章:

javascript - Ember.js Select 在隐藏并再次显示时重置

javascript - 为什么 jQuery/JavaScript (classname or id).value.length 在验证用户名时不起作用?

css - react 全局SCSS : class styling not working

ReactJs CreateClass 不是一个函数

r - 在 Shiny 应用程序中使用 googleway 绘制航点路线

javascript - JS 表单插件渲染后 AngularJS 失去双向绑定(bind)

javascript - 如何在 javascript 中使用正则表达式验证密码?

reactjs - 在 webpack 中响应多个 css 加载器

javascript - 谷歌地图 → 手动 fitBounds

google-maps - 在谷歌地图上显示多条路线