Je suis encore assez nouveau chez React, mais j'ai progressé lentement et j'ai rencontré quelque chose sur lequel je suis coincé.
J'essaie de créer un composant "timer" dans React, et pour être honnête, je ne sais pas si je le fais correctement (ou efficacement). Dans mon code ci - dessous, je mets l'état de retourner un objet { currentCount: 10 }
et ont été à jouer avec componentDidMount
, componentWillUnmount
et render
je peux seulement obtenir l'état de « compte à rebours » de 10 à 9.
Question en deux parties: qu'est-ce que je me trompe? Et, y a-t-il un moyen plus efficace d'utiliser setTimeout (plutôt que d'utiliser componentDidMount
& componentWillUnmount
)?
Merci d'avance.
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'est plus nécessaire, react le fait tout seul maintenant.this.timer.bind(this)
que this.timer seul ne fonctionnait pasclass Clock extends Component
ne se lie pas automatiquement. Cela dépend donc de la façon dont vous créez vos composants si vous devez lier.Réponses:
Je vois 4 problèmes avec votre code:
setState
méthode pour modifier réellement l'étatEssayons de résoudre ce problème:
Il en résulterait une minuterie qui diminue de 10 à -N. Si vous voulez une minuterie qui diminue à 0, vous pouvez utiliser une version légèrement modifiée:
la source
componentDidMount
c'est le bon endroit pour déclencher les événements côté client, donc je l'utiliserais pour lancer le compte à rebours. À quelle autre méthode pensez-vous pour l'initialisation?Compte à rebours de 10 secondes mis à jour avec
class Clock extends Component
la source
Mise à jour du compte à rebours de 10 secondes à l'aide de Hooks (une nouvelle proposition de fonctionnalité qui vous permet d'utiliser l'état et d'autres fonctionnalités de React sans écrire de classe. Ils sont actuellement dans React v16.7.0-alpha).
la source
Si quelqu'un recherche une approche React Hook pour implémenter setInterval. Dan Abramov en a parlé sur son blog . Vérifiez-le si vous voulez une bonne lecture sur le sujet, y compris une approche de classe. Fondamentalement, le code est un Hook personnalisé qui transforme setInterval comme déclaratif.
Publier également le lien CodeSandbox pour plus de commodité: https://codesandbox.io/s/105x531vkq
la source
Merci @dotnetom, @ greg-herbowicz
Si elle renvoie "this.state is undefined" - fonction de temporisation de liaison:
la source
Mise à jour de l'état toutes les secondes dans la classe react. Notez que my index.js transmet une fonction qui renvoie l'heure actuelle.
la source