Tenho brincado com o React e tenho o seguinte componente de tempo que apenas renderiza Date.now()
na tela:
import React, { Component } from 'react';
class TimeComponent extends Component {
constructor(props){
super(props);
this.state = { time: Date.now() };
}
render(){
return(
<div> { this.state.time } </div>
);
}
componentDidMount() {
console.log("TimeComponent Mounted...")
}
}
export default TimeComponent;
Qual seria a melhor maneira de fazer com que esse componente fosse atualizado a cada segundo para redesenhar o tempo de uma perspectiva do React?
javascript
reactjs
matador de floco de neve
fonte
fonte
react-interval-rerender
O código a seguir é um exemplo modificado do site React.js.
O código original está disponível aqui: https://reactjs.org/#a-simple-component
fonte
updater
porque isso estraga o ciclo de atualização@Waisky sugeriu:
Se você gostaria de fazer a mesma coisa, usando ganchos:
Em relação aos comentários:
Você não precisa passar nada dentro
[]
. Se passartime
entre colchetes, significa executar o efeito toda vez que o valor detime
mudar, ou seja, invoca um novo asetInterval
cada vez,time
muda, que não é o que estamos procurando. Queremos invocar apenassetInterval
uma vez quando o componente é montado e, em seguida,setInterval
chamasetTime(Date.now())
cada 1000 segundos. Finalmente, invocamosclearInterval
quando o componente é desmontado.Observe que o componente é atualizado, com base em como você o usou
time
, toda vez que o valor detime
mudar. Isso não tem nada a ver com colocartime
em[]
deuseEffect
.fonte
[]
) como segundo argumento parauseEffect
?No
componentDidMount
método de ciclo de vida do componente , você pode definir um intervalo para chamar uma função que atualiza o estado.fonte
fonte
Então você estava no caminho certo. Dentro de seu,
componentDidMount()
você poderia ter concluído o trabalho implementandosetInterval()
para acionar a mudança, mas lembre-se de que a maneira de atualizar o estado de um componente é viasetState()
, portanto, dentro de seucomponentDidMount()
você poderia ter feito isso:Além disso, você usa o
Date.now()
que funciona, com acomponentDidMount()
implementação que ofereci acima, mas obterá um longo conjunto de atualizações de números desagradáveis que não são legíveis por humanos, mas é tecnicamente o tempo de atualização a cada segundo em milissegundos desde 1 de janeiro de 1970, mas nós deseja tornar este tempo legível para como nós, humanos, lemos o tempo, portanto, além de aprender e implementar,setInterval
você deseja aprendernew Date()
etoLocaleTimeString()
implementá-lo da seguinte forma:Observe que também removi a
constructor()
função, você não precisa dela necessariamente, meu refator é 100% equivalente a inicializar o site com aconstructor()
função.fonte
Devido às mudanças no React V16, onde componentWillReceiveProps () foi preterido, esta é a metodologia que uso para atualizar um componente. Observe que o exemplo abaixo está em Typescript e usa o método getDerivedStateFromProps estático para obter o estado inicial e o estado atualizado sempre que os Props são atualizados.
fonte