Je commence un intervalle sur Y a-t-il une chose de type de collecte des ordures qui tuerait l'intervalle quand même lorsque le composant démonte? Je sais que cela le tuerait sur un rafraîchissement dur, mais je me demandais de spa. P> composantDidMount code>, stockant l'ID d'intervalle retourné et en utilisant ClearInterval code> sur composantwillunmount je me demande si je me demande si Ceci est nécessaire. p>
3 Réponses :
Je ne l'ai pas regardé, mais je ne le pense pas. Parce que réagir n'a aucun moyen de savoir que vous avez initialisé un seinterval. Je vous recommanderais de l'effacer. P>
Il est nécessaire de Veuillez vous reporter à la documentation pour plus d'informations. P> P> ClearInterval code> sur ComposantDiDunMount code>. Avec l'introduction de crochets pour réagir ce processus fastidieux de stockage de l'intervalle dans une variable de membre et une compensation ultérieure, il a été rendu beaucoup plus facile. Vous êtes maintenant en mesure de renvoyer une fonction dans useEffect code> pour effacer les intervalles créés comme:
Cela permettra bien sûr de définir un nouvel intervalle sur chaque rendu (vous avez oublié le [] code>)
NO. P>
par conception, un Lorsque vous créez un intervalle à l'aide de Pour cette raison, il est important de toujours nettoyer les intervalles pour empêcher les fonctions de s'accumuler sur chaque mont, ce qui entraînera des fuites de mémoire et des effets secondaires inattendus, car vous aurez plusieurs fonctions à l'intervalle qui font chacun la même chose. p> seinterval () code> ne serait jamais effacé automatiquement (sauf si vous écrivez une fonction personnalisée qui gère cela en interne). P>
setInterval () code>, vous affirmez essentiellement que vous souhaitez exécuter une fonction à intervalles réguliers, quelle que soit la portée que l'intervalle a été créé. Même si l'intervalle a été créé dans une portée qui n'est plus accessible de n'importe où, l'intervalle sera toujours exécuté à mesure que la durée de vie d'un intervalle n'a aucune dépendance à la portée de l'exécution de la portée. P>
Il n'y a pas non, car GC ne sait pas si cela devrait garder l'intervalle ou non
Vous devez l'effacer manuellement. Vous pouvez résumé-le dans un hoc ou même un crochet personnalisé si vous constatez que vous le répétez dans de nombreux endroits.