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

179
Visualizações
Tengo un estado useReducer que es un objeto que contiene una matriz de números. Cuando trato de incrementar uno de esos números en el reductor, ¿aumenta en 2?

Aquí está mi componente de reacción y mi función reductora:

 const testReducer = (state) => { const newState = {...state} newState.counts[0] += 1 return newState } function App() { const [countState, dispatchCount] = useReducer(testReducer, {counts: [0]}) return ( <div className="App"> <h1>{countState.counts[0]}</h1> <button onClick={dispatchCount}>up</button> </div> ); }

Cuando se hace clic en el botón y se ejecuta el reductor, espero que el recuento que se muestra en el H1 aumente en uno. Esto sucede cuando se hace clic en el botón por primera vez, pero cada clic posterior lo incrementa en 2.

Esto sucede sin importar en qué se inicialice el conteo. Si el valor que estoy incrementando no está en una matriz, funciona normalmente.

¿Puede alguien decirme por qué está pasando esto?

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

0

Tema

newState.counts[0] = += 1 no es una sintaxis válida. Suponiendo que quiso decir newState.counts[0] += 1 , entonces está mutando el objeto de estado.

 const testReducer = (state) => { const newState = {...state} newState.counts[0] += 1 // <-- mutates newState.counts!! return newState }

Con toda probabilidad, esta mutación se expone en su aplicación al procesarse dentro de un componente React.StrictMode .

StrictMode: detección de efectos secundarios inesperados

El modo estricto no puede detectar automáticamente los efectos secundarios, pero puede ayudarlo a detectarlos haciéndolos un poco más deterministas. Esto se hace mediante una doble invocación intencional de las siguientes funciones:

  • Métodos constructor de componentes de clase, render y shouldComponentUpdate
  • Componente de clase método estático getDerivedStateFromProps
  • Cuerpos de componentes de función
  • Funciones de actualización de estado (el primer argumento de setState )
  • Funciones pasadas a useState , useMemo o useReducer <-- esto

Solución

A pesar de que está copiando un estado superficial, aún necesita devolver una nueva referencia de matriz de counts .

 const testReducer = (state) => { const newState = { ...state, counts: [state.counts[0] + 1] }; return newState; };

Editar i-have-a-usereducer-state-thats-an-object-holding-an-array-of-numbers-when-i-t

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