He estado jugando con React y tengo el siguiente componente de tiempo que solo se muestra Date.now()
en la pantalla:
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;
¿Cuál sería la mejor manera de hacer que este componente se actualice cada segundo para volver a dibujar el tiempo desde la perspectiva de React?
javascript
reactjs
asesino de copos de nieve
fuente
fuente
react-interval-rerender
El siguiente código es un ejemplo modificado del sitio web React.js.
El código original está disponible aquí: https://reactjs.org/#a-simple-component
fuente
updater
porque arruina el ciclo de actualización@Waisky sugirió:
Si desea hacer lo mismo, use Hooks:
Respecto a los comentarios:
No es necesario pasar nada por el interior
[]
. Si pasatime
entre corchetes, significa ejecutar el efecto cada vez que el valor de lostime
cambios, es decir, invoca un nuevosetInterval
cada vez,time
cambia, que no es lo que estamos buscando. Solo queremos invocarsetInterval
una vez cuando el componente se monta y luegosetInterval
llamasetTime(Date.now())
cada 1000 segundos. Finalmente, invocamosclearInterval
cuando el componente está desmontado.Tenga en cuenta que el componente se actualiza, en función de cómo lo haya utilizado
time
, cada vez quetime
cambia el valor . Eso no tiene nada que ver con ponertime
en[]
deuseEffect
.fuente
[]
) como segundo argumento auseEffect
?En el
componentDidMount
método del ciclo de vida del componente , puede establecer un intervalo para llamar a una función que actualiza el estado.fuente
fuente
Entonces estabas en el camino correcto. Dentro de su
componentDidMount()
, podría haber terminado el trabajo implementandosetInterval()
para activar el cambio, pero recuerde que la forma de actualizar el estado de un componente es a través desetState()
, por lo que dentro de sucomponentDidMount()
podría haber hecho esto:Además, usa el
Date.now()
que funciona, con lacomponentDidMount()
implementación que ofrecí anteriormente, pero obtendrá un conjunto largo de números desagradables que se actualizan que no son legibles por humanos, pero técnicamente es el tiempo que se actualiza cada segundo en milisegundos desde el 1 de enero de 1970, pero nosotros quiere hacer de este tiempo de lectura a la forma en que los humanos tiempo de lectura, por lo que además de aprender e implementarsetInterval
desea aprender sobrenew Date()
ytoLocaleTimeString()
y desea ponerlo en práctica, así:Tenga en cuenta que también eliminé la
constructor()
función, no necesariamente la necesita, mi refactor es 100% equivalente a inicializar el sitio con laconstructor()
función.fuente
Debido a los cambios en React V16 donde componentWillReceiveProps () ha quedado obsoleto, esta es la metodología que utilizo para actualizar un componente. Observe que el siguiente ejemplo está en Typecript y usa el método estático getDerivedStateFromProps para obtener el estado inicial y el estado actualizado cada vez que se actualizan los Props.
fuente