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

141
Visualizações
Reducir usando mucho useState

En mi proyecto hay muchas entradas, así que he creado cada una de ellas con su propio useState , ¿hay alguna forma de reducir el uso de useState

parte del código

 const [OldGpa, setOldGpa] = useState(0); const [oldHours, setOldHours] = useState(0); const [firstHour, setFirstHour] = useState(0); const [secondHour, setSecondHour] = useState(0); const [threadHour, setThreadHour] = useState(0); const [fourthHour, setFourthHour] = useState(0); const [fifthHour, setFifthHour] = useState(0); const [sixthHour, setSixthHour] = useState(0); const [seventhHour, setSeventhHour] = useState(0); const [firstPoint, setFirstPoint] = useState(0) const [secondPoint, setSecondPoint] = useState(0) const [threadPoint, setThreadPoint] = useState(0) const [fourthPoint, setFourthPoint] = useState(0) const [fifthPoint, setFifthPoint] = useState(0) const [sixthPoint, setSixthPoint] = useState(0) const [seventhPoint, setSeventhPoint] = useState(0) const [GPA, setGPA] = useState(0)

ruta del código: src/componentes/Form.js puede encontrar el código aquí: https://codesandbox.io/s/jovial-smoke-yz1mk5?file=/src/components/Form/Form.js

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

0

Si no desea utilizar ninguna biblioteca, puede convertir todas sus entradas en un objeto como este:

 const [inputs, setInputs] = useState({ OldGpa: 0, oldHours: 0, firstHour: 0, secondHour: 0, thirdHour: 0, fourthHour: 0, fifthHour: 0, sixthHour: 0, seventhHour: 0, firstPoint: 0, secondPoint: 0, thirdPoint: 0, fourthPoint: 0, fifthPoint: 0, sixthPoint: 0, seventhPoint: 0 });

Ahora su estado en un objeto, por lo que debe "vincular" el valor con value={inputs.property}

Sus entradas necesitarán un atributo de nombre para actualizar la propiedad correcta en este objeto (entienda, el atributo de nombre tendrá que ser el mismo que la propiedad del objeto). Deberá "copiar" el prevState así:

 setInputs(prevState => ({ ...prevState, [name] : value }))

De dónde provienen el nombre y el valor del event

P.EJ

 const handleInputs = (event) => { // destructuring the object let {target } = event; let { name, value } = target; setInputs(prevState => ({ ...prevState, [name] : value })) }

O puede desestructurar el evento directamente en el parámetro de función de esta manera:

 const handleInputs = ({target: { value, name}}) => { setInputs(prevState => ({ ...prevState, [name] : value })) }
about 4 years ago · Juan Pablo Isaza Relatório

0

// Outside the component: const initialHours = Array(7).fill(0); const initialPoints = Array(7).fill(0); // Inside the component: const [OldGpa, setOldGpa] = useState(0); const [oldHours, setOldHours] = useState(0); const [hours, setHours] = useState(initialHours); const [points, setPoints] = useState(initialPoints); const [GPA, setGPA] = useState(0)

Luego, cada vez que usara secondHour , por ejemplo, usaría hours[1] en su lugar.

En lugar de setSecondHour(newValue) , sería:

 setHours(hours => { hours = hours.slice(); // Copy the array hours[1] = newValue; return hours; });

A veces, ves que la gente hace eso con llamadas de Object.assign slice pero para mí son torpes e innecesariamente complejas. Si desea evitar reescribir esa lógica cada vez (lo cual es algo razonable), escriba una función de utilidad:

 function setArrayElement(array, index, value) { array = array.slice(); array[index] = value; return array; }

y utilícelo al establecer el segundo valor:

 setHours(hours => setArrayElement(hours, 1, newValue));

Si lo desea, puede combinar más cosas en un objeto que almacene en el estado, como se muestra en la documentación .

Nota

A diferencia del método setState que se encuentra en los componentes de clase, useState no fusiona automáticamente los objetos de actualización. Puede replicar este comportamiento combinando el formulario de actualización de funciones con la sintaxis de distribución de objetos:

 const [state, setState] = useState({}); setState(prevState => { // Object.assign would also work return {...prevState, ...updatedValues}; });

Otra opción es useReducer , que es más adecuada para administrar objetos de estado que contienen múltiples subvalores.

(No estoy seguro de estar de acuerdo con la parte "más adecuada", pero useReducer es otra opción).

about 4 years ago · Juan Pablo Isaza Relatório

0

Puedes considerar esto como una referencia:

 function init(initialCount) { return {count: initialCount}; } function reducer(state, action) { switch (action.type) { case 'increment': return {count: state.count + 1}; case 'decrement': return {count: state.count - 1}; case 'reset': return init(action.payload); default: throw new Error(); } } function Counter({initialCount}) { const [state, dispatch] = useReducer(reducer, initialCount, init); return ( <> Count: {state.count} <button onClick={() => dispatch({type: 'reset', payload: initialCount})}> Reset </button> <button onClick={() => dispatch({type: 'decrement'})}>-</button> <button onClick={() => dispatch({type: 'increment'})}>+</button> </> ); }

Del mismo modo, puede modificar según su caso de uso:

Entonces, la respuesta a su pregunta es... usar useReducer en lugar de useState.

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