Todavía soy bastante nuevo en React, pero he estado avanzando lentamente y me he encontrado con algo en lo que estoy atascado.
Estoy tratando de construir un componente de "temporizador" en React, y para ser honesto, no sé si lo estoy haciendo bien (o de manera eficiente). En mi código de abajo, me puse el estado para devolver un objeto { currentCount: 10 }
y he estado jugando con componentDidMount
, componentWillUnmount
y render
y sólo puedo obtener el estado de "cuenta atrás" de 10 a 9.
Pregunta de dos partes: ¿Qué me estoy equivocando? Y, ¿hay una forma más eficiente de usar setTimeout (en lugar de usar componentDidMount
& componentWillUnmount
)?
Gracias de antemano.
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)
ya no es necesario, reaccionar lo hace por sí solo ahora.this.timer.bind(this)
esto.El temporizador por sí solo no funcionóclass Clock extends Component
no se enlaza automáticamente. Por lo tanto, depende de cómo esté creando sus componentes si necesita enlazar.Respuestas:
Veo 4 problemas con su código:
setState
método para cambiar el estadoIntentemos arreglar eso:
Esto daría como resultado un temporizador que disminuye de 10 a -N. Si desea un temporizador que disminuya a 0, puede usar una versión ligeramente modificada:
fuente
componentDidMount
es el lugar correcto para activar los eventos del lado del cliente, por lo que lo usaría para iniciar la cuenta regresiva. ¿Qué otro método estás pensando para inicializar?Cuenta atrás actualizada de 10 segundos usando
class Clock extends Component
fuente
Cuenta atrás actualizada de 10 segundos usando Hooks (una nueva propuesta de características que te permite usar el estado y otras características de React sin escribir una clase. Actualmente están en React v16.7.0-alpha).
fuente
Gracias @dotnetom, @ greg-herbowicz
Si devuelve "this.state is undefined" - función de temporizador de enlace:
fuente
Si alguien está buscando un enfoque de React Hook para implementar setInterval. Dan Abramov habló de ello en su blog . Compruébalo si quieres una buena lectura sobre el tema, incluido un enfoque de clase. Básicamente, el código es un Hook personalizado que convierte setInterval en declarativo.
También publicando el enlace CodeSandbox para mayor comodidad: https://codesandbox.io/s/105x531vkq
fuente
Actualizando el estado cada segundo en la clase de reacción. Tenga en cuenta que my index.js pasa una función que devuelve la hora actual.
fuente