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

193
Visualizações
¿Cómo llamar a setState sin ningún evento desencadenante?

Quiero actualizar el valor de una variable de contador después de un tiempo fijo indefinidamente. Aquí está mi código:

 class Counter extends React.Component { constructor(props) { super(props); this.state = { myCount: 1 }; } // Update state after every 15 seconds. setTimeout(function(){ this.setState({myCount: this.state.myCount + 1}); }, 15000); }

Sin embargo, recibo un error sobre un token inesperado con este componente. ¿Cómo puedo establecer el estado dentro de la clase correctamente sin usar ningún detector de eventos?

Gracias.

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

0

Su llamada a setTimeout está en el nivel superior del cuerpo de la class donde se esperan las propiedades, el constructor y los métodos. No puedes poner código arbitrario allí. (Aunque podría tener un inicializador de propiedades; sin embargo, no es una buena idea en este caso).

Ponlo encomponentDidMount ; y asegúrese de guardar el identificador del temporizador (en la instancia, por lo general) y borre el temporizador en componentWillUnmount para que no se active si el componente se desmonta antes de que se produzca la devolución de llamada del temporizador:

 class Counter extends React.Component { constructor(props) { super(props); this.state = { myCount: 1, }; } componentDidMount() { // Update state after every 15 seconds. this.timerHandle = setTimeout(() => { // **** this.setState((previousState) => { // **** return { myCount: previousState.myCount + 1 }; // **** }); // **** }, 15000); } componentWillUnmount() { clearTimeout(this.timerHandle); } }

Nota al margen: observe los cambios en las líneas **** de arriba

  • Reemplacé su función tradicional con una función de flecha para que se cierre sobre this .
  • Cambié su devolución de llamada para usar la versión de devolución de llamada de setState , que generalmente es mejor cuando se configura el estado en función del estado existente.

...después de un tiempo fijo indefinidamente.

Una devolución de llamada setTimeout solo ocurrirá una vez. Es posible que desee setInterval si desea que el contador se actualice cada 15 segundos. O alternativamente, inicie un nuevo setTimeout cuando se ejecute la devolución de llamada, así:

 startCounterTimer() { // Update state after every 15 seconds. this.timerHandle = setTimeout(() => { this.setState((previousState) => { this.startCounterTimer(); // *** return { myCount: previousState.myCount + 1 }; }); }, 15000); } componentDidMount() { this.startCounterTimer(); }
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