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

118
Visualizações
Los ganchos de matriz UseState devuelven un nuevo objeto en cada cambio en el campo de entrada

Estoy usando ganchos React para un proyecto en el que estoy trabajando. Me encuentro con una situación en la que quiero usar una matriz en el enlace useState, pero no estoy muy seguro de cómo hacerlo.

Creé una tabla que cambia el número de sus columnas de forma dinámica, según el número de días del mes.

He intentado algo como esto:

 const [inText, setInText] = useState([]); const inputText = (e) => { setInText([...inText,{ id:inText.length, value:e.target.value }]); }

numberOfDays es una variable que calculo. Contiene el número de días del mes actual.

 const renderINP = () => { let td = []; for (let i = 1; i <= numberOfDays; i++) { td.push(<td key={i}><input type="text" onChange={inputText} /></td>); } return td; };

Este es el código que muestra la tabla en el navegador:

 <table> <tbody> <tr className="work-days"> <td>Working days</td> {renderINP()} </tr> </tbody> </table>

Intento capturar el 'inText' con cosole.log(inText). Cuando escribo algo en la entrada, como 0 por ejemplo, crea un objeto, {id: 0, valor: '0'}. Cuando vuelvo a escribir, crea dos objetos {id: 0, value: '0'} y {id: 1, value: '0.'}. Además, cuando elimino algo, crea otro objeto.

¿Cómo puedo crear solo un objeto para cada entrada y cómo puedo obtener el valor de cada inText individualmente? Por ejemplo, obtenga el valor de inText en la segunda entrada, no el valor de todos los objetos.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

useState se usa principalmente para mantener valores únicos. En este caso, tiene una matriz de objetos y desea actualizar el valor de los objetos individuales. useReducer es preferible.

Puedes leer más sobre useReducer

Esto debería hacer lo que estás buscando:

 import React, { useReducer } from "react"; const App = () => { const reducer = (state, action) => { if (action.type === "ADD") { const newState = [...state]; newState.push({ id: action.id, value: action.value }); return newState; } if (action.type === "UPDATE") { const newState = [...state]; const foundItem = newState.find((item) => item.id === action.id); foundItem.value = action.value; return newState; } }; const initialState = []; const [state, dispatch] = useReducer(reducer, initialState); const numberOfDays = 7; const inputText = ({ id, value }) => { if (state.find((item) => item.id === id)) { dispatch({ type: "UPDATE", id, value }); } else { dispatch({ type: "ADD", id, value }); } console.log(state); }; const renderINP = () => { let td = []; for (let i = 1; i <= numberOfDays; i++) { td.push( <td key={i}> <input type="text" onChange={(e) => inputText({ id: i, value: e.target.value })} /> </td> ); } return td; }; return ( <> <table> <tbody> <tr className="work-days"> <td>Working days</td> {renderINP()} </tr> </tbody> </table> {JSON.stringify(state)} </> ); }; export default App;

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