Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

132
Vistas
¿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 la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda