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

146
Visualizações
Actualización de estado que no se refleja en el enlace personalizado

Estoy usando react-redux para almacenar un estado modeData que es una matriz de objetos. Usando react-hotkeys-hook , cuando el usuario presiona ctrl+l , se ejecuta una función que actualiza el estado. En esa misma función, cuando console.log el mismo estado, no refleja los cambios.
Aquí está el código que estoy usando:

 import { useSelector, useDispatch } from "react-redux"; import { modeDataIncrement } from "./redux/modeSlice"; import { useHotkeys } from "react-hotkeys-hook"; import { useEffect } from "react"; //.. const modeData = useSelector((state) => state.mode.modeData); //array of objects. const handler = (id) => { const isActive = modeData.find((x) => x.id === id).active; console.log(modeData); // does not show the updated state dispatch(modeDataIncrement(id)); }; useHotkeys("ctrl+l", () => handler("Clone")); useEffect(() => { console.log(modeData); //working fine! }, [modeData]);

modeSlice.js :

 import { createSlice } from "@reduxjs/toolkit"; export const modeSlice = createSlice({ name: "mode", initialState: { modeData: [{ id: "Clone", active: false }], }, reducers: { modeDataIncrement: (state, action) => { state.modeData.find( (e) => e.id === action.payload && (e.active = !e.active) ); }, }, }); export const { modeDataIncrement } = modeSlice.actions; export default modeSlice.reducer;

¿Alguna idea de lo que estoy haciendo mal?
¡Gracias!

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

0

Su código necesita usar la última versión de modeData, pero según el código fuente de useHotkeys , memorizará la función y no la actualizará automáticamente. Entonces, siempre está usando la versión de la devolución de llamada que existía en el primer renderizado.

Para solucionar esto, debe pasar una matriz de dependencias a useHotkeys, para que pueda romper la memorización:

 const handler = (id) => { const isActive = modeData.find((x) => x.id === id).active; console.log(modeData); dispatch(modeDataIncrement(id)); }; useHotkeys("ctrl+l", () => handler("Clone"), [modeData]);
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