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,