Maison >interface Web >js tutoriel >Comment concevoir des hooks useState et useEffect : guide du débutant

Comment concevoir des hooks useState et useEffect : guide du débutant

Susan Sarandon
Susan Sarandonoriginal
2024-11-06 21:56:02810parcourir

How to Design useState and useEffect Hooks: A Beginner’s Guide

Lors du développement d'applications modernes, en particulier des applications Web, vous devrez souvent gérer des données qui évoluent au fil du temps. Par exemple, si un utilisateur clique sur un bouton, nous pouvons souhaiter mettre à jour l'affichage ou récupérer de nouvelles données sur un serveur. Des hooks comme useState et useEffect nous aident à gérer cela en douceur. Décrivons le fonctionnement de ces concepts et explorons comment les concevoir étape par étape.


Que sont useState et useEffect ?

  • useState : Ce hook vous permet d'ajouter un état à un composant. Considérez « état » comme toute donnée dont un composant doit se souvenir entre les rendus, comme un compteur ou une liste d'éléments.
  • useEffect : Ce hook vous permet d'effectuer des actions après le rendu du composant, telles que récupérer des données, configurer des minuteries ou modifier le titre de la page.

Pour rendre ce guide facile à comprendre, nous allons décomposer chaque crochet selon sa logique essentielle et construire à partir de là.


Conception du hook useState

1. Comprendre les bases de la gestion de l'état

Imaginez que vous ayez une simple application de compteur. Chaque fois que vous appuyez sur un bouton, le nombre augmente de 1. Pour que cela fonctionne, vous devez stocker le décompte actuel quelque part et le mettre à jour à chaque fois que vous cliquez sur le bouton.

2. Objectif d'utilisationÉtat

useState devrait :

  • Stocker une valeur.
  • Fournissez un moyen de mettre à jour cette valeur.
  • Déclenchez un nouveau rendu (ou un nouveau dessin) du composant lorsque la valeur change.

3. Concept de base de useState

Voici un aperçu de base de la façon dont useState pourrait fonctionner sous le capot :

  • Nous avons besoin d'une variable pour contenir la valeur de notre état (par exemple, un compteur).
  • Nous avons besoin d'une fonction pour mettre à jour cette valeur.
  • Lorsque la valeur est mise à jour, nous devons restituer le composant pour refléter la nouvelle valeur.

4. Concevoir useState à partir de zéro

Définissons une structure simple pour useState :

  1. Configuration initiale : Créez une fonction appelée useState qui prend une valeur initiale en entrée.
  2. Renvoyer la valeur actuelle et la fonction de mise à jour : La fonction doit renvoyer deux choses :
    • La valeur actuelle.
    • Une fonction qui peut mettre à jour cette valeur.
  3. Déclencher le nouveau rendu : Assurez-vous que toute mise à jour de l'état entraîne le nouveau rendu du composant (nous simplifierons cette partie dans notre exemple).

Exemple de code

Voici à quoi pourrait ressembler une version simple de useState :

function useState(initialValue) {
    // Step 1: Create a variable to hold the current state value
    let currentState = initialValue;

    // Step 2: Define a function to update this value
    function setState(newValue) {
        // Update the state
        currentState = newValue;

        // Simulate a re-render (you’d do this differently in a real application)
        render();
    }

    // Step 3: Return the state and the function to update it
    return [currentState, setState];
}

// Usage example:
const [count, setCount] = useState(0);
console.log(count); // Outputs: 0
setCount(1);         // Updates state to 1
console.log(count);  // Outputs: 1 (in real use, this would trigger re-rendering)

Conception du crochet useEffect

Alors que useState gère les données locales, useEffect nous permet d'effectuer des "effets secondaires", comme récupérer des données ou mettre à jour le titre du document. Un effet secondaire est toute interaction avec le monde extérieur.

1. Objectif d'utilisationEffet

useEffect devrait :

  • Exécutez une fonction après le rendu du composant.
  • Nettoyez éventuellement tous les effets lorsque le composant est supprimé.
  • Facultativement, réexécutez si les données spécifiées changent.

2. Concept de base de useEffect

Les principales parties de useEffect sont :

  1. Fonction d'effet : Il s'agit de l'action que vous souhaitez effectuer après le rendu, comme enregistrer un message, récupérer des données ou démarrer un minuteur.
  2. Tableau de dépendances : Cette liste facultative indique à useEffect quand réexécuter. Si une valeur de cette liste change, l'effet sera à nouveau exécuté.

3. Concevoir useEffect à partir de zéro

Mettez en place une structure simple pour useEffect :

  1. Exécution de fonction : Créez une fonction appelée useEffect qui prend deux paramètres :
    • Une fonction d'effet à exécuter.
    • Un tableau de dépendances facultatif.
  2. Exécuter l'effet après le rendu : Assurez-vous que la fonction d'effet s'exécute après le rendu du composant.
  3. Exécuter l'effet sur le changement de dépendance : Si un tableau de dépendances est fourni, réexécutez l'effet uniquement lorsque l'une des dépendances change.

Exemple de code

Voici une version de base de useEffect :

let previousDeps;  // To store previous dependencies

function useEffect(effectFunction, dependencies) {
    // Step 1: Check if dependencies have changed
    const hasChanged = dependencies
        ? !previousDeps || dependencies.some((dep, i) => dep !== previousDeps[i])
        : true;

    // Step 2: Run the effect function if dependencies changed
    if (hasChanged) {
        effectFunction();
        previousDeps = dependencies;  // Update the previous dependencies
    }
}

// Usage example:
useEffect(() => {
    console.log("Effect has run!");

    // Simulate cleanup if needed
    return () => console.log("Cleanup effect!");
}, [/* dependencies */]);

Rassembler le tout : exemple d'utilisation

Simulons un composant en utilisant à la fois useState et useEffect.

function Component() {
    // Initialize state with useState
    const [count, setCount] = useState(0);

    // Log a message each time count changes with useEffect
    useEffect(() => {
        console.log(`Count has changed to: ${count}`);
    }, [count]);  // Re-run effect if count changes

    // Simulate user interaction
    setCount(count + 1);
}

Dans cet exemple :

  • Nous créons un état de comptage avec useState.
  • Nous utilisons useEffect pour enregistrer un message chaque fois que le nombre change.
  • Chaque fois que setCount met à jour le décompte, il déclenche un nouveau rendu, provoquant la réexécution de useEffect si le décompte a changé.

Résumé

La conception de useState et useEffect implique :

  1. Stocker les valeurs (useState) et fournir un moyen de les mettre à jour et de les restituer.
  2. Exécution de fonctions après le rendu (useEffect), avec des options de nettoyage et de suivi des dépendances.

Ces hooks vous aident à créer des applications dynamiques et interactives, qu'il s'agisse de simples compteurs, de récupération de données ou de gestion d'état plus complexe. Avec ces bases, vous êtes bien équipé pour créer des applications qui répondent aux actions des utilisateurs et aux modifications de données en temps réel !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn