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

298
Views
¿Cómo actualizo los estados `onChange` en una matriz de objetos en React Hooks?

Recuperé datos almacenados usando useState en una matriz de objetos, los datos luego se enviaron a campos de formulario. Y ahora quiero poder actualizar los campos (estado) a medida que escribo.

He visto ejemplos de personas que actualizan el estado de una propiedad en una matriz, pero nunca del estado de una matriz de objetos, por lo que no sé cómo hacerlo. Obtuve el índice del objeto pasado a la función de devolución de llamada, pero no sabía cómo actualizar el estado usándolo.

 // sample data structure const datas = [ { id: 1, name: 'john', gender: 'm' } { id: 2, name: 'mary', gender: 'f' } ] const [datas, setDatas] = useState([]); const updateFieldChanged = index => e => { console.log('index: ' + index); console.log('property name: '+ e.target.name); setData() // ?? } return ( <React.Fragment> {datas.map((data, index) => { <li key={data.name}> <input type="text" name="name" value={data.name} onChange={updateFieldChanged(index)} /> </li> })} </React.Fragment> )
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Así es como lo haces:

 // sample data structure /* const data = [ { id: 1, name: 'john', gender: 'm' } { id: 2, name: 'mary', gender: 'f' } ] */ // make sure to set the default value in the useState call (I already fixed it) const [data, setData] = useState([ { id: 1, name: 'john', gender: 'm' } { id: 2, name: 'mary', gender: 'f' } ]); const updateFieldChanged = index => e => { console.log('index: ' + index); console.log('property name: '+ e.target.name); let newArr = [...data]; // copying the old datas array newArr[index] = e.target.value; // replace e.target.value with whatever you want to change it to setData(newArr); } return ( <React.Fragment> {data.map((datum, index) => { <li key={datum.name}> <input type="text" name="name" value={datum.name} onChange={updateFieldChanged(index)} /> </li> })} </React.Fragment> )
over 4 years ago · Santiago Trujillo Report

0

Puede hacer esto sin mutación asignando su matriz anterior a una nueva, intercambiando lo que desea cambiar por un elemento actualizado en el camino.

 setDatas( datas.map(item => item.id === index ? {...item, someProp : "changed"} : item ))
over 4 years ago · Santiago Trujillo Report

0

setDatas(datas=>({ ...datas, [index]: e.target.value }))

siendo index la posición de destino y e.target.value el nuevo valor

over 4 years ago · Santiago Trujillo 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!