Je sais que le démarrage d'un intervalle dans useEffect est facile à effacer comme ceci:
const startGame = () => {
const interval = setInterval(some function, time);
}
useEffect(() => {
startGame()
})
Mais que faire si je dois définir un intervalle dans une fonction, comment effacer l'intervalle dans ce cas, ou tout simplement je n'ai pas à le faire ??
useEffect(() => {
const interval = setInterval(some function, time);
return () => clearInterval(interval)
})
3 Réponses :
Utilisez ce code par exemple:
import React, { useEffect, useRef } from 'react';
const Timer = () => {
let interval = useRef();
const startGame = () => {
interval.current = setInterval(() => {
// your code
}, 1000)
}
useEffect(() => {
startGame();
return () => clearInterval(interval.current)
})
return (
// your jsx code;
);
};
export default Timer;
const interval = setInterval (intervalle); à l'intérieur de setInterval, vous devez fournir un rappel pas la même affectation
Vous pouvez utiliser le hook useEffect pour effacer l'intervalle
import React, { useEffect } from "react";
const Timer = () => {
const interval = React.useRef();
const startGame = () => {
interval.current = setInterval(() => {
//code
}, 3000);
};
React.useEffect(() => {
return () => {
clearInterval(interval.current);
};
}, []);
};
export default Timer;
et si j'ai plusieurs instructions setInterval ?
Vous pouvez les affecter à différentes propriétés de l'objet intervalle comme interval.a, interval.b et ainsi de suite, puis les effacer trop séparément
@CodeEagle Je ne suis pas trop sûr que cela disparaisse. Est-ce que ça marche? Ma préoccupation est principalement à ce sujet: lorsque vous clearInterval (interval.current); , vous effacez une valeur (disons peu importe, interval.current tient à ce moment-là, dites nombre 15. Mais ceux qui sont déjà assignés peuvent conduire à une boucle infinie. Un autre problème est que useEffect n'a pas de dépendance ici donc il ne sera pas appelé après le chargement initial.
Je suppose que c'est ce que vous voulez:
var ctr = 0, interval = 0;
var startGame1 = () => {
ctr++;
clearInterval(interval);
console.log("hello")
if(ctr>=5){
clearInterval(interval);
}else{
interval = setInterval(()=>{startGame1()}, 1000);
}
}
startGame1()
L'intervalle doit mettre à jour le jeu, donc aucune condition n'est nécessaire pour l'effacer dans le jeu, je dois l'effacer dans useEffect
Je pense que vous voulez vérifier la réponse de @ urvashi ci-dessus. Ça ne marche pas?
Vous pouvez utiliser
clearInterval (interval)n'importe où, que ce soit dans une fonction ou dans useEffect. Qu'est-ce que cela a à voir avec cela?const interval = setInterval (interval);à l'intérieur desetIntervalvous devez fournir un rappel pas la même affectation@ABGR Je crée un jeu et je dois définir des intervalles qui devraient fonctionner au début du jeu dans une fonction!