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

190
Vistas
ReactJS: ¿puedo generar varios campos de formulario con propiedades de valor que compartan los mismos nombres pero no los mismos valores?

Después de 2 días de feroces luchas, decidí publicar por primera vez en Stack Overflow :).

Mi inquietud es la siguiente:

Como parte de un proyecto, quiero generar una cantidad de campos de entrada equivalente al tamaño de una matriz. Ejemplo :

 function App() { const [UseState, setUseState] = useState(""); const array = [0, 1, 2]; const HandleAdding = (e) => { e.preventDefault; const returnJson = { UseState }; //rest of the code }; return ( <div> {array.map(() => ( <form onSubmit={HandleAdding}> <input value={UseState} onChange={(e) => setUseState(e.target.value)} /> </form> ))} </div> ); }

Ya podemos conocer el problema, al insertar un valor en un campo, este mismo valor se insertará en todos los demás campos que comparten el mismo UseState como valor. Para obtener información aún más concreta, aquí hay una ilustración del problema en CodeSandBox:

https://codesandbox.io/s/adoring-rgb-n0bdk?file=/src/App.js

Así que intente completar un campo y notará el problema. Intenté muchas cosas para resolver mi problema de esta manera:

https://codesandbox.io/s/blissful-rain-mcol2?file=/src/App.js (Estoy tratando de adaptar el código para resolver mi problema).

No pongo nada más para que no se haga demasiado largo. Entonces, ¿tendrías una solución para resolver el problema? Por mi parte, me faltan ideas y todavía soy un principiante en React. ¡Gracias por adelantado! ^^

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

0

 function App() { const [UseState, setUseState] = useState({}); const array = [0, 1, 2]; const size = array.length; const HandleAdding = (e) => { e.preventDefault; const returnJson = { UseState }; //rest of the code }; return ( <div> {array.map((x) => ( <form onSubmit={HandleAdding}> <input value={UseState[x]} onChange={(e) => setUseState({...UseState, [x]: e.target.value})} /> </form> ))} </div> ); }

Puede resolver el problema fácilmente cambiando la estructura de UseState para que se convierta en un objeto con el siguiente patrón

 UseState = { 0: 'Isaac', 1: 'James', 2: 'John' }

Debe almacenar varios valores, por lo que cuando recupera el valor, use UseState[x] y, cuando actualice, debe distribuir el objeto y actualizar el valor de una propiedad en particular.

about 4 years ago · Juan Pablo Isaza Denunciar

0

  1. En general, para los formularios, mantiene los valores de las entradas en un objeto en el estado y luego actualiza ese estado con los nuevos valores cuando se cambia la entrada.

  2. En este momento está creando más formularios de los que necesita. Ni siquiera necesita el elemento de form porque los elementos de input en realidad no lo requieren.

  3. Inicialice su estado con un objeto.

  4. map sobre la matriz en lugar de la longitud de la matriz.

  5. Asigne un nombre a sus entradas para que cuando cambien los valores pueda actualizar fácilmente el estado.

 const { useState } = React; function Example() { // Initialise state with an object const [ data, setData ] = useState({}); // Example input names const arr = ['name', 'address', 'number']; // When the input changes, get the name // and the value, and update the state using // that information function handleChange(e) { const { name, value } = e.target; setData({ ...data, [name]: value }); } function handleSubmit() { console.log(data); } function createInputs(arr) { // `map` over the array and return some JSX return arr.map(el => { return ( <label>{el.toUpperCase()}:&nbsp; <input type="text" name={el} /> </label> ); }); } return ( <div onChange={handleChange}> {createInputs(arr)} <button onClick={handleSubmit}>Submit</button> </div> ); }; // Render it ReactDOM.render( <Example />, document.getElementById("react") );
 label { display: block; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script> <div id="react"></div>

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