我正在尝试制作一个简单的地图应用程序,该应用程序不包含任何可在点击时触发信息框的标记,我正在使用react-google-maps库,现在我正在尝试处理点击部分的信息框,我为每个标记添加了一个isOpen属性,默认情况下该值应为false,当该值为true时,应显示infoBox。 这是状态:
state = {
markers: [
{
"id": "Abu-Simbel",
"position":{ lat: 22.337232, lng: 31.625799 },
"isOpen":false
},
{
"id": "Karnak-Temples",
"position":{ lat: 25.718835, lng: 32.65727 },
"isOpen":false
},
{
"id": "Luxor-Temple",
"position":{ lat: 25.699502, lng: 32.639051 },
"isOpen":false
},
{
"id": "Edfu-Temple",
"position":{ lat: 24.977929, lng: 32.87337 },
"isOpen":false
},
{
"id": " Phiale-Temple",
"position":{ lat: 24.025171, lng: 32.884643 },
"isOpen":false
},
{
"id": " Kom-Ombo-Temple",
"position":{ lat: 24.452133, lng: 32.928432 },
"isOpen":false
}
]
}
这是handleClick函数:
handleMarkerTap=(marker)=>{
if (marker.isOpen === false) {
marker.isOpen = true
} else if (marker.isOpen === true) {
marker.isOpen = false
}
}
这就是我在地图组件内部渲染标记的方式:
props.markers.map(
(marker)=>(
<div key={marker.id}>
<Marker
title={marker.id}
id={marker.id}
position={marker.position}
isOpen={marker.isOpen}
onClick={
() => {
props.handleMarkerTap(marker)
console.log(marker.id+" is "+marker.isOpen);
}
}
>
{marker.isOpen && <InfoBox
onCloseClick={props.handleMarkerTap}
options={{ closeBoxURL: ``, enableEventPropagation: true }}
>
<div style={{ backgroundColor: `yellow`, opacity: 0.75, padding: `12px` }}>
<div style={{ fontSize: `16px`, fontColor: `#08233B` }}>
{marker.id}
</div>
</div>
</InfoBox>}
</Marker>
</div>
)
)
问题是如何通过此函数访问每个标记上的isOpen属性。
答案 0 :(得分:0)
当您要更改(修改)组件中的任何状态时(即执行类似marker.isOpen = true
的操作),您应该在组件herachy中调用setState
来触发重新渲染。重新渲染会使UI根据您对状态所做的更改来重新绘制。
此刻,您正在对isOpen
字段进行突变,但看上去与此并不相关。
也许您可以对组件代码进行以下更改?这只是您可以采用的一种方法,但是它可能是实现重新渲染的最简单方法,而没有太多细节:
setState