Hook useTimeout de React

ReactReactBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons explorer comment implémenter la fonction setTimeout() de manière déclarative en utilisant le hook personnalisé useTimeout dans React. Ce hook nous permet de configurer un délai d'attente et de le nettoyer facilement, tout en gardant en mémoire la dernière fonction de rappel. Nous verrons également un exemple d'utilisation du hook useTimeout pour créer un minuteur d'une seconde qui met à jour l'état d'un composant toutes les secondes.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) react(("React")) -.-> react/StateManagementGroup(["State Management"]) react/FundamentalsGroup -.-> react/jsx("JSX") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StateManagementGroup -.-> react/use_state_reducer("Using useState and useReducer") subgraph Lab Skills react/jsx -.-> lab-38411{{"Hook useTimeout de React"}} react/hooks -.-> lab-38411{{"Hook useTimeout de React"}} react/use_state_reducer -.-> lab-38411{{"Hook useTimeout de React"}} end

React useTimeout Hook

index.html et script.js ont déjà été fournis dans la machine virtuelle. En général, vous n'avez qu'à ajouter du code à script.js et style.css.

Pour implémenter setTimeout() de manière déclarative, créez un hook personnalisé qui prend une callback et un delay. Utilisez le hook useRef() pour créer une ref pour la fonction de rappel, et utilisez le hook useEffect() pour retenir la dernière fonction de rappel. Ensuite, utilisez le hook useEffect() pour configurer le délai d'attente et le nettoyer.

Voici un extrait de code d'exemple qui illustre cette approche :

const useTimeout = (callback, delay) => {
  const savedCallback = React.useRef();

  React.useEffect(() => {
    savedCallback.current = callback;
  }, [callback]);

  React.useEffect(() => {
    const tick = () => {
      savedCallback.current();
    };
    if (delay !== null) {
      let id = setTimeout(tick, delay);
      return () => clearTimeout(id);
    }
  }, [delay]);
};

const OneSecondTimer = (props) => {
  const [seconds, setSeconds] = React.useState(0);

  useTimeout(() => {
    setSeconds(seconds + 1);
  }, 1000);

  return <p>{seconds}</p>;
};

ReactDOM.createRoot(document.getElementById("root")).render(<OneSecondTimer />);

Veuillez cliquer sur 'Go Live' dans le coin inférieur droit pour exécuter le service web sur le port 8080. Ensuite, vous pouvez rafraîchir l'onglet Web 8080 pour prévisualiser la page web.

Résumé

Félicitations! Vous avez terminé le laboratoire sur le hook React useTimeout. Vous pouvez pratiquer d'autres laboratoires dans LabEx pour améliorer vos compétences.