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

281
Views
Reaccionar: cómo cambiar los valores de entrada dentro del bucle cuando cambia el estado

Soy nuevo en reaccionar y me topé con un problema con el que necesito ayuda. Estoy colocando varios elementos de entrada y estoy tratando de cambiar sus valores en función de un cambio de estado que, en este caso, es manual (verdadero o falso);

El código es una forma simple donde tiene 12 entradas dentro a través de un bucle. Mi problema es que, según si el manual es verdadero o falso, quiero cambiar el valor de las entradas.

Si el manual devuelve verdadero, quiero que actúe normalmente (ingrese normalmente), pero cuando el manual devuelve falso, quiero que todos mis valores de entrada muestren el número 12 y viceversa. El estado manual se activa mediante un botón, como se ve a continuación.

Tengo dos problemas aquí:

  1. Si establezco el valor en una cadena vacía, entonces no puedo actualizarlo
  2. Si condiciono qué mostrar si tengo dos entradas, una con el valor y otra sin, según el estado devuelto del manual, obtengo el error controlado y no controlado por hacer esto.

¿Alguien puede ayudarme a implementar esto? He intentado usar múltiples soluciones sin éxito:

 import React, {useState, useEffect, useRef} from 'react'; function App() { const [budget, setBudget] = useState([]) const [manual, setManual] = useState(false); const handleInput = inputEv =>{ const budgetState = budget; const input = {index: inputEv.target.getAttribute('index'), value: inputEv.target.value}; // if data input already exists - update it if(budgetState.some(data=>data.index === input.index)){ var current = budgetState.find(data=>data.index === input.index); current.value = input.value; } else { budgetState.push(input) setBudget(budgetState); } } return ( <div> <form className="inputs"> {Array(12).fill().map((e, index)=>( <div key={index} className="month"> <input type="text" onChange={handleInput} index={index} disabled={manual ? false : true}/> </div> ))} </form> <button onClick={()=>setManual(!manual)}>Click</button> </div> ); } export default App;
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Antes de comenzar la parte lógica, primero debe declarar el state como:

 const length = 12; const [budget, setBudget] = useState(Array.from({ length }, () => 12)); const [manual, setManual] = useState(false);

Demo en vivo

Demostración de Codesandbox

Tienes que considerar dos escenarios:

1) When you click on the button which will toggle to manual value

Llamará a una función changeManual cuya definición es:

 function changeManual() { if (manual) setBudget((state) => state.map((o) => 12)); else setBudget(budget); setManual(!manual); }

2) When you input on one of the input HTML element then you have to update the respective value in an array.

Necesita event e index , por lo que puede llamar a una función que internamente pasa tanto el valor como

 <input type="text" value={budget[index]} onChange={(e) => handleInput(e, index)} disabled={manual ? false : true} />

que activará la función handleInput cuya definición es

 const handleInput = (inputEv, index) => { const value = inputEv.target.value; setBudget((state) => state.map((val, i) => (i !== index ? val : value))); };
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!