import React, { Component } from "react";
import { Marker, InfoWindow } from "react-google-maps";
import { labeledIcon } from "./Icons";
let closeInfoWindowFn;
class MapMarker extends Component {
state = {
infoWindowOpen: false
};
closeInfoWindow = () => {
console.log("closeInfoWindow");
this.setState({ infoWindowOpen: false });
};
openInfoWindow = () => {
console.log("openInfoWindow");
const isOpen = this.state.infoWindowOpen;
if (!isOpen) this.setState({ infoWindowOpen: true });
if (
(closeInfoWindowFn && closeInfoWindowFn !== this.closeInfoWindow) ||
isOpen
)
closeInfoWindowFn();
closeInfoWindowFn = this.closeInfoWindow;
};
render() {
const props = this.props;
return this.state.infoWindowOpen && props.infoWindowLabel;
}
}
export default MapMarker;
Чтобы гарантировать, что только один infoWindowоткрыт одновременно на карте Google с несколькими маркерами, я определил переменную, closeInfoWindowFnкоторая указывает на closeInfoWindowметод ранее открытого InfoWindow.
Функция вызывается при openInfoWindowнажатии другого маркера.
Это работает, но это антипаттерн?
import React, { Component } from "react";
import { Marker, InfoWindow } from "react-google-maps";
import { labeledIcon } from "./Icons";
let closeInfoWindowFn;
class MapMarker extends Component {
state = {
infoWindowOpen: false
};
closeInfoWindow = () => {
console.log("closeInfoWindow");
this.setState({ infoWindowOpen: false });
};
openInfoWindow = () => {
console.log("openInfoWindow");
const isOpen = this.state.infoWindowOpen;
if (!isOpen) this.setState({ infoWindowOpen: true });
if (
(closeInfoWindowFn && closeInfoWindowFn !== this.closeInfoWindow) ||
isOpen
)
closeInfoWindowFn();
closeInfoWindowFn = this.closeInfoWindow;
};
render() {
const props = this.props;
return this.state.infoWindowOpen && props.infoWindowLabel;
}
}
export default MapMarker;
Чтобы гарантировать, что только один infoWindowоткрыт одновременно на карте Google с несколькими маркерами, я определил переменную, closeInfoWindowFnкоторая указывает на closeInfoWindowметод ранее открытого InfoWindow.
Функция вызывается при openInfoWindowнажатии другого маркера.
Это работает, но это антипаттерн?
00JavaScript, reactjs,