1 回答
TA贡献1853条经验 获得超18个赞
就像您componentDidMount在第一次加载地图时强制添加标记一样,您应该componentDidUpdate在道具更改时使用它来执行相同的操作。在您的 GoogleMap 组件中:
componentDidUpdate() {
this.placeMMarkers()
}
googleMap我不会将其作为参数传递,而是将其设置为实例变量componentDidMount:
this.googleMap = new window.google.maps.Map(...
然后将 placeMMarkers 更改为使用this.googleMap:
placeMMarkers = () => {
this.props.markers.forEach((m) => {
m.map = this.googleMap;
// ...
由于您在 中附加了一个事件处理程序placeMMarkers,您还应该添加一些逻辑来区分新标记和现有标记,以避免将多个事件处理程序添加到现有标记。
针对您关于如何最好地设置状态的问题,我认为您所拥有的很好,但您不需要将新标记放在数组中:
let newMarker = {
position: { lat: latlng.lat(), lng: latlng.lng() },
label: 'New',
map: null,
};
let markers = [...this.state.markers, newMarker]
添加回答
举报