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

120
Views
Enfoca un elemento creado por un despacho en una parte diferente de la aplicación

Estoy escribiendo una aplicación algo compleja con React y Redux, y tengo una situación en la que hacer clic en un botón envía una acción que crea un nuevo elemento DOM en una parte completamente diferente de la aplicación y quiero que este nuevo elemento DOM esté enfocado. Me pregunto cuál es la mejor manera de hacerlo.

Me las arreglé para que funcione así:

 const handleClick = () => { ReactDOM.flushSync(() => { dispatch(createNewElement(id)); }); document.getElementById(id).focus(); };

Estoy usando identificaciones de DOM regulares para identificar el elemento para enfocar y la función flushSync (casi sin documentar) para asegurarme de que esté realmente presente en el DOM al seleccionarlo.

No puedo usar referencias porque el nuevo elemento está en un componente completamente diferente. No puedo usar autoFocus porque esos elementos también se pueden crear de formas que no deberían enfocarse automáticamente y no quiero que mi HTML se llene de enfoques automáticos obsoletos. No quiero poner el estado enfocado en la tienda Redux porque será una pesadilla mantenerlo correctamente.

En lugar de flushSync , también podría envolver el .focus en un setTimeout(…, 0) . Parece funcionar, pero no estoy completamente convencido de que el elemento esté garantizado para cuando se agote el tiempo de espera (a diferencia de flushSync ).

¿Es este un uso legítimo de ReactDOM.flushSync ? ¿Hay otra forma más sencilla de hacerlo?

about 4 years ago · Juan Pablo Isaza
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!