Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

191
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!