Crochet de useStateréaction


Le React useStateHook nous permet de suivre l'état d'un composant de fonction.

L'état fait généralement référence aux données ou aux propriétés qui doivent être suivies dans une application.


ImporteruseState

Pour utiliser le useStatecrochet, nous devons d'abord l'insérer importdans notre composant.

Exemple:

En haut de votre composant, importle useStateHook.

import { useState } from "react";

Notez que nous détruisons useStatecar reactil s'agit d'une exportation nommée.

Pour en savoir plus sur la déstructuration, consultez la section ES6 .


InitialiseruseState

Nous initialisons notre état en appelant useStatenotre composant de fonction.

useStateaccepte un état initial et renvoie deux valeurs :

  • L'état actuel.
  • Une fonction qui met à jour l'état.

Exemple:

Initialiser l'état en haut du composant de fonction.

import { useState } from "react";

function FavoriteColor() {
  const [color, setColor] = useState("");
}

Notez qu'encore une fois, nous détruisons les valeurs renvoyées par useState.

La première valeur, color, est notre état actuel.

La deuxième valeur, setColor, est la fonction utilisée pour mettre à jour notre état.

Ces noms sont des variables qui peuvent être nommées comme vous le souhaitez.

Enfin, nous définissons l'état initial sur une chaîne vide :useState("")


w3schools CERTIFIED . 2022

Obtenir une certification!

Complétez les modules React, faites les exercices, passez l'examen et devenez certifié w3schools !!

95 $ S'INSCRIRE

Lire l'état

Nous pouvons maintenant inclure notre état n'importe où dans notre composant.

Exemple:

Utilisez la variable d'état dans le composant rendu.

import { useState } from "react";
import ReactDOM from "react-dom";

function FavoriteColor() {
  const [color, setColor] = useState("red");

  return <h1>My favorite color is {color}!</h1>
}

ReactDOM.render(<FavoriteColor />, document.getElementById('root'));


Mettre à jour l'état

Pour mettre à jour notre état, nous utilisons notre fonction de mise à jour d'état.

Nous ne devrions jamais mettre à jour directement l'état. Ex : color = "red"n'est pas autorisé.

Exemple:

Utilisez un bouton pour mettre à jour l'état :

import { useState } from "react";
import ReactDOM from "react-dom";

function FavoriteColor() {
  const [color, setColor] = useState("red");

  return (
    <>
      <h1>My favorite color is {color}!</h1>
      <button
        type="button"
        onClick={() => setColor("blue")}
      >Blue</button>
    </>
  )
}

ReactDOM.render(<FavoriteColor />, document.getElementById('root'));


Que peut contenir l'État

Le useStatecrochet peut être utilisé pour garder une trace des chaînes, des nombres, des booléens, des tableaux, des objets et de toute combinaison de ceux-ci !

Nous pourrions créer plusieurs crochets d'état pour suivre les valeurs individuelles.

Exemple:

Créez plusieurs crochets d'état :

import { useState } from "react";
import ReactDOM from "react-dom";

function Car() {
  const [brand, setBrand] = useState("Ford");
  const [model, setModel] = useState("Mustang");
  const [year, setYear] = useState("1964");
  const [color, setColor] = useState("red");

  return (
    <>
      <h1>My {brand}</h1>
      <p>
        It is a {color} {model} from {year}.
      </p>
    </>
  )
}

ReactDOM.render(<Car />, document.getElementById('root'));

Ou, nous pouvons simplement utiliser un état et inclure un objet à la place !

Exemple:

Créez un crochet unique contenant un objet :

import { useState } from "react";
import ReactDOM from "react-dom";

function Car() {
  const [car, setCar] = useState({
    brand: "Ford",
    model: "Mustang",
    year: "1964",
    color: "red"
  });

  return (
    <>
      <h1>My {car.brand}</h1>
      <p>
        It is a {car.color} {car.model} from {car.year}.
      </p>
    </>
  )
}

ReactDOM.render(<Car />, document.getElementById('root'));

Puisque nous suivons maintenant un seul objet, nous devons référencer cet objet, puis la propriété de cet objet lors du rendu du composant. (Ex : car.brand)


Mise à jour des objets et des tableaux dans l'état

Lorsque l'état est mis à jour, l'état entier est écrasé.

Et si nous voulions seulement mettre à jour la couleur de notre voiture ?

Si nous n'appelions que setCar({color: "blue"}), cela supprimerait la marque, le modèle et l'année de notre état.

Nous pouvons utiliser l'opérateur de propagation JavaScript pour nous aider.

Exemple:

Utilisez l'opérateur de propagation JavaScript pour mettre à jour uniquement la couleur de la voiture :

import { useState } from "react";
import ReactDOM from "react-dom";

function Car() {
  const [car, setCar] = useState({
    brand: "Ford",
    model: "Mustang",
    year: "1964",
    color: "red"
  });

  const updateColor = () => {
    setCar(previousState => {
      return { ...previousState, color: "blue" }
    });
  }

  return (
    <>
      <h1>My {car.brand}</h1>
      <p>
        It is a {car.color} {car.model} from {car.year}.
      </p>
      <button
        type="button"
        onClick={updateColor}
      >Blue</button>
    </>
  )
}

ReactDOM.render(<Car />, document.getElementById('root'));

Parce que nous avons besoin de la valeur actuelle de l'état, nous passons une fonction dans notre setCarfonction. Cette fonction reçoit la valeur précédente.

Nous renvoyons ensuite un objet, en étalant le previousStateet en écrasant uniquement la couleur.


Testez-vous avec des exercices

Exercer:

Complétez cette instruction pour suivre une variable "count" à l'aide du crochet useState.

import { useState } from "react";

function KeepCount() {
  const [, ] = useState(0);
}