Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

284
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda