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

179
Vistas
Cómo establecer correctamente el foco en un elemento div en React usando createRef

Tengo una aplicación de reacción en la que estoy trabajando, y actualmente tengo un menú desplegable personalizado que quiero abrir/cerrar cuando un usuario hace clic en el gatillo (el botón de flecha), cerrarlo cuando un usuario selecciona una opción, o ciérrelo cuando un usuario haga clic fuera del componente mostrado.

Aquí está mi código:

En aras de la simplicidad, solo agregué el código con el que quiero ayuda.

 class NavBar extends Component { constructor(props) { super(props); this.state = { showCurrencies: false, }; this.handleShowCurrencies = this.handleShowCurrencies.bind(this); } componentDidMount() { this.currencyRef = createRef(); } componentDidUpdate(prevProps, prevState) { if (this.state.showCurrencies) return this.currencyRef.current.focus(); } handleShowCurrencies = () => { this.setState({ showCurrencies: !this.state.showCurrencies, }); }; render() { <div className="currency-switch" onClick={this.handleShowCurrencies}> {currencySymbol} <span> <button> <img src={`${process.env.PUBLIC_URL}/images/arrow.png`} /> </button> </span> </div> {this.state.showCurrencies ? ( <div className="dropdown" tabIndex={"0"} ref={this.currencyRef} onBlur={this.handleShowCurrencies} > {currencies?.map((currency) => ( <div key={currency.symbol} className={`dropdown-items ${currencySymbol === currency.symbol ? "selected" : "" }`} onClick={() => changeCurrencySymbol(currency.symbol)} > {`${currency.symbol} ${currency.label}`} </div> ))} </div> ) : null} }

Actualmente, dirigir el foco a un elemento div funciona bien y hacer clic fuera del elemento también. Sin embargo, volver a hacer clic en el gatillo o incluso seleccionar una opción no cierra el elemento div. Parece que se está procesando dos veces (echa un vistazo más de cerca a la consola): https://drive.google.com/file/d/1ObxU__SbD_Upxr6qcy5eYO4LSy6Mzq9C/view?usp=sharing

¿Por qué está pasando eso? ¿Cómo puedo resolverlo?

PD: No suelo preguntar sobre StackOverflow, así que no estoy familiarizado con el proceso. Por favor, tenga paciencia conmigo. Si necesita cualquier otra información, estaré más que feliz de proporcionársela.

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