Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

90
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!