Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

96
Vistas
Compruebe si el diálogo ya está abierto

Estoy trabajando en una aplicación en la que muestro un mapa y varias ubicaciones diferentes con marcadores. Se puede hacer clic en estos marcadores para abrir un cuadro de diálogo simple, que muestra información sobre esa ubicación específica. Aquí hay un ejemplo de código:

Mapeo a través de una matriz de ubicaciones y llamando a la función en cada marcador.

 {markers && ( <> {markers.map((marker, idx) => ( <MarkerDialog key={idx} marker={marker} /> ))} </> )}

Agregar diálogo al marcador.

 const MarkerDialog = ({ marker }) => { const [dialog, setDialog] = useState(false); const handleClickOpen = () => { setDialog(true); }; const handleClose = () => { setDialog(false); }; const handleMarkerClick = (e, marker) => { if (dialog) { handleClose(); } else { handleClickOpen(); } }; return ( <div> <Marker position={marker.location} icon={status(marker)} eventHandlers={{ click: handleMarkerClick, }} /> {dialog && ( <Dialog marker={marker} dialog={dialog} handleClose={handleClose} /> )} </div> ); }; export default MarkerDialog;

Esto crea un problema si hace clic en varios marcadores. En ese caso, los diálogos se apilan uno encima del otro, porque la aplicación nunca cierra el diálogo anterior.

Si hago clic en el marcador y se abre el cuadro de diálogo, y luego voy y hago clic en otro marcador, me gustaría que se cierre el cuadro de diálogo anterior. ¿Cómo puedo conseguir esto?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Levante el estado y mantenga un índice seleccionado para el clic del marcador.

MarcadorDiálogo

 const MarkerDialog = ({ marker, handleMarkerClick, handleClose,dialog }) => { return ( <div> <Marker position={marker.location} icon={status(marker)} eventHandlers={{ click: handleMarkerClick }} /> {dialog && ( <Dialog marker={marker} dialog={dialog} handleClose={handleClose} /> )} </div> ); }; export default MarkerDialog;

Padre

 const [selectedMarkerIndex, setSelectedMarkerIndex] = useState(null); const handleClose = () => { setSelectedMarkerIndex(-1) }; const handleMarkerClick = (e, marker,index) => { /* Do stuff with e and marker */ setSelectedMarkerIndex(index) }; { markers && ( <> {markers.map((marker, idx) => ( <MarkerDialog key={idx} marker={marker} handleMarkerClick={(e, marker) => handleMarkerClick(e, marker, idx)} handleClose={handleClose} dialog={idx === selectedMarkerIndex} /> ))} </> ); }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda