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

189
Views
React 18: ¿cómo forzar el renderizado síncrono?

Después de actualizar a React 18, tengo problemas con la representación emergente de Leaflet.

Parece que la nueva función de representación se ha vuelto asíncrona, lo que rompe la visualización de la ventana emergente de Leaflet (porque Leaflet necesita calcular el tamaño de la ventana emergente para el posicionamiento, pero ahora obtiene un contenido vacío ya que React aún no ha renderizado la ventana emergente).

Antes (funcionando como se esperaba):

 marker.bindPopup(() => { var div = document.createElement('div'); ReactDOM.render(<MyPopup />); console.log(div.innerHTML); // <div>[...]</div> return div; });

Con React 18 (posicionamiento roto):

 marker.bindPopup(() => { var div = document.createElement('div'); createRoot(div).render(<MyPopup />); console.log(div.innerHTML); // empty string! return div; });

¿Hay alguna forma de forzar a React 18 a mostrar la ventana emergente antes de devolver el div ?

Gracias de antemano por su ayuda e ideas.

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Acabo de encontrar otra solución que parece funcionar y que se adapta mejor a un entorno de producción: flushSync . En la documentación de React, no se menciona para este propósito, solo para optar por no participar en el procesamiento por lotes automático.

Todavía no estoy seguro de si esta es la forma correcta de hacerlo o si se romperá en una actualización futura.

 marker.bindPopup(() => { var div = document.createElement('div'); const root = createRoot(div); flushSync(() => { root.render(<MyPopup />); }); console.log(div.innerHTML); // <div>[...]</div> return div; });
about 4 years ago · Santiago Trujillo Report

0

No lo probé en su escenario, pero tal vez actuar podría funcionar https://reactjs.org/docs/testing-recipes.html#act

Recuerde importar act desde react-dom/test-utils

 marker.bindPopup(() => { var div = document.createElement('div'); const root = createRoot(div); act(() => { root.render(<MyPopup />); }); return div; });
about 4 years ago · Santiago Trujillo 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!