ReactJS - Это анти-шаблон?

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нажатии другого маркера.

Это работает, но это антипаттерн?

javascript,reactjs,

0

Ответов: 0

ReactJS - Это анти-шаблон?
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,
Похожие вопросы
Яндекс.Метрика