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

196
Vistas
Detecta si el elemento de entrada está enfocado dentro de ReactJS

¿Cómo puedo detectar si un elemento de entrada como el siguiente está actualmente enfocado dentro de una función de renderizado de ReactJS?

 <input type="text" style={searchBoxStyle} placeholder="Search"></input>
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede verificar con document.activeElement siempre que el nodo de entrada esté montado y haya una referencia a él:

 const searchInput = React.useRef(null) if (document.activeElement === searchInput.current) { // do something } return <input type="text" ref={searchInput} />

Otra forma sería agregar detectores de eventos para los eventos de focus y blur dentro del campo de entrada:

 const [focused, setFocused] = React.useState(false) const onFocus = () => setFocused(true) const onBlur = () => setFocused(false) return <input type="text" onFocus={onFocus} onBlur={onBlur} />

Tenga en cuenta que esto llamará a volver a renderizar cada vez que el nodo esté enfocado o borroso (pero esto es lo que quiere, ¿verdad?)

over 4 years ago · Santiago Trujillo Denunciar

0

Comencé con la respuesta dada por David, donde describe dos métodos, y ambos funcionaron para mí, pero tenía dudas sobre ambos:

  1. En el primer caso utiliza findDOMNode , lo que tiene algunas desventajas: como mínimo se desaconseja su uso, y puede implementarse fácilmente de forma que se considere un antipatrón; y también puede hacer que el código sea más lento, omitiendo el DOM virtual y trabajando directamente con el DOM.

  2. En la segunda opción, cree y administre un estado de componente solo para descubrir que la respuesta parece demasiado trabajo, puede perder la sincronización fácilmente y puede hacer que el componente se vuelva a procesar innecesariamente.

Entonces, después de intentar explorar más el problema, se me ocurrió la siguiente solución:

 if (this.props.id === document.activeElement.id) { // your code goes here }

Se aplica el mismo comentario sobre la respuesta de David:

Sin embargo, no debe hacer esto en el método de render , porque es posible que el nodo de entrada aún no esté montado. Use un método de ciclo de vida como componentDidUpdate o componentDidMount .

ventajas:

  • utiliza las propiedades del componente actual (que son valores inmutables)
  • no requiere administración estatal y, por lo tanto, no causará una nueva representación innecesaria
  • no requiere atravesar DOM, por lo que el rendimiento debería ser tan bueno como sea posible
  • no requiere crear una referencia de componente

Requisitos:

  • su componente debe tener una propiedad de id que se pasa al elemento de formulario que desea verificar (lo que probablemente sea el caso de todos modos)
over 4 years ago · Santiago Trujillo Denunciar

0

Usando ganchos:

Primero creas e inicializas tu Referencia

 const yourElement = useRef(null)

Luego, etiqueta su elemento con la referencia que acaba de crear:

 <div ref={yourElement}>Im an DOM node</div>

Y luego, usa esta lógica ya que necesita comparar si la propiedad del document.activeElement document.activeElement es igual al nodo DOM al que hace referencia

 yourElement.current === document.activeElement
over 4 years ago · Santiago Trujillo 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