You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React类组件中如何通过点击Marker动态渲染google-maps-react的Polyline

实现思路

React 所有动态渲染逻辑都通过状态驱动,你不需要在点击事件中手动生成组件,只需要新增状态控制 Polyline 的显隐和对应数据源,点击 Marker 时修改状态即可。

具体修改步骤

1. 扩展组件state

新增两个状态字段,分别控制 Polyline 是否显示、存储当前需要渲染的航线坐标:

state = {
    showingInfoWindow: false,
    activeMarker: {},
    selectedPlace: {},
    // 新增字段
    shouldShowPolylines: false,
    activePolylinePaths: []
};

2. 修改Marker点击回调

点击Marker时,把需要展示的航线数据存入状态,同时开启显示开关:

如果不同Marker对应不同航线,可在这一步根据Marker的属性筛选pathCoordinates中匹配的航线数据,以下示例默认点击任意Marker展示所有航线

onMarkerClick = (props, marker, e) =>
this.setState({
    selectedPlace: props,
    activeMarker: marker,
    showingInfoWindow: true,
    shouldShowPolylines: true,
    activePolylinePaths: pathCoordinates.coordinates
});

3. (可选)修改弹窗关闭回调

如果需要关闭InfoWindow时同步隐藏航线,在关闭逻辑里重置Polyline相关状态:

onClose = props => {
if (this.state.showingInfoWindow) {
    this.setState({
    showingInfoWindow: false,
    activeMarker: null,
    // 新增重置逻辑
    shouldShowPolylines: false,
    activePolylinePaths: []
    });
}
};

4. 修改render中的Polyline渲染逻辑

改成条件渲染,只有状态开启时才渲染对应Polyline,同时给列表项添加唯一key避免React警告:

{this.state.shouldShowPolylines && this.state.activePolylinePaths.map((item, index) => 
    <Polyline
        key={index} {/* 如有航线唯一ID替换为ID即可 */}
        path={item}
        geodesic={true}
        options={{
            strokeColor: "#ff2527",
            strokeOpacity: 0.3,
            strokeWeight: 1,
            icons: [
                {
                    icon: lineSymbol,
                    offset: "0",
                    repeat: "2px"
                }
            ]
        }}
    />
)}

内容的提问来源于stack exchange,提问作者Kaguei Nakueka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:15:07