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

280
Vistas
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 Respuestas
Responde la pregunta

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 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