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

269
Vistas
La entrada pierde el foco después de escribir el carácter Reaccionar

He estado tratando de depurar esto durante horas y miré todas las demás preguntas de desbordamiento de pila que tienen el mismo estilo de problema, pero todas solo dicen que use claves y eso todavía no funciona para mí. He hecho un ejemplo más simple de mi código que replica el error.

 import React from 'react' import { useState } from 'react' const FormTest = () => { const [name, setName] = useState('') const TestExperience = (props) => { return (<div> <h1>Test Experience {props.num}</h1> <input type="text" name="name" placeholder="Name" /> </div>) } const processFormData = (event) => { event.preventDefault(); console.log(event.target); } const [nums, setNums] = useState([1, 2, 3]); const arr = nums.map((num, index) => <TestExperience num={num} key={index}/>); return ( <div> <form onSubmit={(event) => { processFormData(event); }}> {arr} <button onClick={() => { setNums([...nums, nums.length + 1]); }}>Add one!</button> </form> </div> ) } export default FormTest

Intenté mover TestExperience a su propia función separada. Básicamente, estoy tratando de tener entradas de las que uno pueda crear más, y este problema de perder el foco surgió del hecho de que cada vez que se agregaba una entrada, todos los formData existentes desaparecían debido a una nueva representación. El objetivo sería simplemente usar la función onSubmit para analizar los datos, pero dado que desaparece después de agregar la entrada, pensé que necesitaba almacenarla. He estado yendo por madriguera tras madriguera tratando de arreglar lo que parece un problema tan simple y sigo encontrando problemas con cada implementación que intento.

El objetivo general es que tengo un botón de enviar y un botón de agregar entrada, y traté de deshacerme de todo value={stateVariable} y onChange={setStateVariable} y simplemente convertir el botón de entrada en un botón de "enviar" para poder ejecute processFormData y haga cosas diferentes según el botón de envío que era, pero no tengo idea de cómo verificar de qué botón proviene el envío cuando hay dos botones diferentes, por lo que una respuesta a eso también podría ser muy útil porque entonces puedo evitar todo este lío estatal.

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

0

Debe mover TestExperience fuera de FormTest .

 import React from "react"; import { useState } from "react"; const TestExperience = (props) => { const [name, setName] = useState(""); return ( <div> <h1>Test Experience {props.num}</h1> <input type="text" name="name" placeholder="Name" onChange={(event) => { event.preventDefault(); setName(event.target.value); }} value={name} /> </div> ); }; const FormTest = () => { const processFormData = (event) => { event.preventDefault(); console.log(event.target); }; const [nums, setNums] = useState([1, 2, 3]); const arr = nums.map((num, index) => ( <TestExperience num={num} key={index} /> )); return ( <div> <form onSubmit={(event) => { processFormData(event); }} > {arr} //another way I tried to do it below // {nums.map((num, index) => ( <TestExperience num={num} key={index} /> ))} <button onClick={() => { setNums([...nums, nums.length + 1]); }} > Add one! </button> </form> </div> ); }; export default FormTest;

Zona de pruebas de código => https://codesandbox.io/s/trusting-elbakyan-mxrez?file=/src/App.js

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