Ainda sou bastante novo no React, mas tenho trabalhado lentamente e encontrei algo em que estou preso.
Estou tentando construir um componente "cronômetro" no React e, para ser honesto, não sei se estou fazendo isso da maneira certa (ou eficiente). No meu código abaixo, eu definir o estado para retornar um objeto { currentCount: 10 }
e foram brincar com componentDidMount
, componentWillUnmount
e, render
e eu só pode obter o estado a "contagem regressiva" 10-9.
Pergunta de duas partes: O que estou entendendo de errado? E há uma maneira mais eficiente de usar setTimeout (em vez de usar componentDidMount
& componentWillUnmount
)?
Agradeço antecipadamente.
import React from 'react';
var Clock = React.createClass({
getInitialState: function() {
return { currentCount: 10 };
},
componentDidMount: function() {
this.countdown = setInterval(this.timer, 1000);
},
componentWillUnmount: function() {
clearInterval(this.countdown);
},
timer: function() {
this.setState({ currentCount: 10 });
},
render: function() {
var displayCount = this.state.currentCount--;
return (
<section>
{displayCount}
</section>
);
}
});
module.exports = Clock;
bind(this)
não é mais necessário, o Reagir faz isso sozinho agora.this.timer.bind(this)
como this.timer sozinho não funcionouclass Clock extends Component
não liga automaticamente. Portanto, depende de como você está criando seus componentes se você precisa ligá-los.Respostas:
Vejo 4 problemas com seu código:
setState
método para realmente alterar o estadoVamos tentar consertar isso:
Isso resultaria em um cronômetro que diminuiria de 10 para -N. Se você quiser que o cronômetro diminua para 0, pode usar a versão ligeiramente modificada:
fonte
componentDidMount
é o lugar certo para acionar os eventos do lado do cliente, então eu o usaria para iniciar a contagem regressiva. Que outro método você está pensando para inicializar?Contagem regressiva de 10 segundos atualizada usando
class Clock extends Component
fonte
Contagem regressiva de 10 segundos atualizada usando Hooks (uma nova proposta de recurso que permite usar o estado e outros recursos do React sem escrever uma classe. Eles estão atualmente no React v16.7.0-alpha).
fonte
Obrigado @dotnetom, @ greg-herbowicz
Se retornar "this.state is undefined" - função de temporizador de ligação:
fonte
Se alguém estiver procurando por uma abordagem React Hook para implementar setInterval. Dan Abramov falou sobre isso em seu blog . Confira se quiser uma boa leitura sobre o assunto, incluindo uma abordagem de classe. Basicamente, o código é um Gancho personalizado que torna setInterval declarativo.
Também postando o link CodeSandbox para sua conveniência: https://codesandbox.io/s/105x531vkq
fonte
Atualizando o estado a cada segundo na classe react. Observe que o my index.js passa uma função que retorna a hora atual.
fonte