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

103
Vistas
Cómo cambiar una clase según el enfoque y el cambio en un formulario de entrada en React

Tengo una situación en la que quiero agregar una clase llamada shrink al texto de la etiqueta a continuación (Nombre para mostrar) cuando hago clic o escribo en el cuadro de entrada. Mi código está a continuación:

 const FormInput = ({ label, ...otherProps} ) => { let labelClassName = 'formInput-label'; const addLabelClassName = () => { labelClassName = `${labelClassName} shrink`; console.log(labelClassName, 'labelClassName inside') } console.log(labelClassName, 'labelClassName outside') return ( <div className="group"> {label && <label className={labelClassName} >{label}</label> } <input onFocus={addLabelClassName } onChange={addLabelClassName } className="formInput" {...otherProps} /> </div> ) };

Mi pregunta:

  1. ¿Por qué cuando enfoco/escribo, al principio, React genera los nombres de clase correctos para labelClassName inside como formInput-label shrink , pero inmediatamente lo vuelve a cambiar a formInput-label en la posición labelClassName outside ? ¿Cómo arreglaría esto?

  2. También intenté cambiar el código para usar el enfoque UseState como se muestra a continuación:

 const FormInput = ({ label, ...otherProps} ) => { const [interaction, setInteraction] = useState(''); let labelClassName = 'formInput-label'; const onInteracting = () => { setInteraction('interacting') } if(interaction === 'interacting') { labelClassName = `${labelClassName} shrink`; } return ( <div className="group"> {label && <label className={labelClassName} >{label}</label> } <input onFocus={onInteracting} onChange={onInteracting} className="formInput" {...otherProps} /> </div> ) };

Y esto agregará el shrink de clase correcto a labelClassName , pero no puedo eliminarlo cuando hago clic fuera de la entrada/formulario. ¿Cómo puedo arreglar esto?

¡Muchas gracias!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El segundo enfoque es una mejor manera porque con el cambio de estado activará la renderización del componente (el primer enfoque nunca volverá a renderizar el componente).

En el segundo enfoque, puede aprovechar el evento onBlur y crear un controlador que establecerá el estado en el valor predeterminado. Algo como esto. No necesita onChange para setIntercation

 ... const handleBlur = () => { setInteraction(""); }; ...

y luego en la entrada, debe configurar onBlur prop. onChange no debería hacer lo mismo que ya hace onFocus .

 .... <input onFocus={onInteracting} onBlur={handleBlur} className="formInput" {...otherProps} /> ....
about 4 years ago · Juan Pablo Isaza 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