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

134
Visualizações
¿Por qué setState y useState no se ejecutan dentro de la devolución de llamada del detector de eventos?

Me he encontrado con un problema muy extraño. Tengo una función que se usa como devolución de llamada para un eventListener. Esta devolución de llamada tiene una llamada setState dentro.

Lo extraño es que si paso la función como accesorio a otro componente y la llamo en el controlador onClick , la llamada setState se ejecuta y su devolución de llamada se imprime en la consola.

Cuando lo estoy usando como devolución de llamada al eventListener, en el evento que se activa, la función se ejecuta, ¡pero el setState dentro no se ejecuta!

No se lanza ningún error o advertencia en la consola.

Código:

Utils.js

 import { EventEmitter } from 'fbemitter'; const emitter = new EventEmitter();

ArchivoActual.jsx

 import { emitter } from './Utils'; class ComponentWithListener extends React.Component { state = { selections: this.props.selections }; componentDidMount() { emitter.addListener('resetSelections', () => this.resetSelections()); } componentWillUnMount() { emitter.removeAllListeners('resetSelections'); } resetSelections = () => { console.log('resetSelections() called'); this.setState({ selections: this.props.initialSelections }, () => { console.log('successfully reset selections'); someFunctionCall(); }); } }

OtroArchivo.jsx

 import { emitter } from './Utils'; class OtherFile extends React.Component { // ..state declaration and other functions resetStoredFilters = () => { // do some things emitter.emit('resetSelections'); } // other functions and render() }

Así que aquí, cada vez que se resetStoredFilter() , el setState dentro resetSelections() no se ejecuta, y el resultado que obtengo en la consola para resetSelections() es:

 resetSelections() called

someFunctionCall() .

Compare esto con cuando paso resetSelections como accesorio a un componente secundario y lo llamo desde dentro de un controlador onClick desde dentro del componente secundario:

 // body of some function inside child component onClick={resetSelections}

Cuando se hace clic en este elemento dentro del componente secundario, el resultado que obtengo en la consola para resetSelection() es:

 resetSelections() called successfully reset selections

someFunctionCall() no se ejecuta.

Incluso intenté usar componentes funcionales y useState hook en CurrentFile.jsx para verificar si eso marca la diferencia. Veo el mismo problema todavía.

¿Por qué pasó esto? ¿Y cómo hacer que setState se ejecute en las devoluciones de llamada de eventListener?

about 4 years ago · Juan Pablo Isaza
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