Gancio di useStatereazione


Il React useStateHook ci consente di tracciare lo stato in un componente di funzione.

Lo stato si riferisce generalmente a dati o proprietà che devono essere monitorati in un'applicazione.


ImportareuseState

Per usare useStateHook, dobbiamo prima importinserirlo nel nostro componente.

Esempio:

Nella parte superiore del tuo componente, importl' useStateHook.

import { useState } from "react";

Si noti che stiamo destrutturando poiché si useStatetratta reactdi un'esportazione denominata.

Per saperne di più sulla destrutturazione, consulta la sezione ES6 .


Inizializzare useState

Inizializziamo il nostro stato richiamando useStateil nostro componente funzione.

useState accetta uno stato iniziale e restituisce due valori:

  • Lo stato attuale.
  • Una funzione che aggiorna lo stato.

Esempio:

Inizializza lo stato nella parte superiore del componente della funzione.

import { useState } from "react";

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

Si noti che, ancora una volta, stiamo destrutturando i valori restituiti da useState.

Il primo valore, color, è il nostro stato attuale.

Il secondo valore, setColor, è la funzione utilizzata per aggiornare il nostro stato.

Questi nomi sono variabili che possono essere nominate come preferisci.

Infine, impostiamo lo stato iniziale su una stringa vuota: useState("")


w3schools CERTIFIED . 2022

Ottieni la certificazione!

Completa i moduli React, fai gli esercizi, fai l'esame e diventa certificato w3schools!!

ISCRIVITI A $95

Leggi Stato

Ora possiamo includere il nostro stato ovunque nel nostro componente.

Esempio:

Usa la variabile di stato nel componente renderizzato.

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'));


Stato di aggiornamento

Per aggiornare il nostro stato, utilizziamo la nostra funzione di aggiornamento dello stato.

Non dovremmo mai aggiornare direttamente lo stato. Es: color = "red"non è consentito.

Esempio:

Utilizzare un pulsante per aggiornare lo stato:

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'));


Cosa può contenere lo stato

L' useStateHook può essere utilizzato per tenere traccia di stringhe, numeri, booleani, array, oggetti e qualsiasi combinazione di questi!

Potremmo creare più hook di stato per tenere traccia dei valori individuali.

Esempio:

Crea più ganci di stato:

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'));

Oppure possiamo usare solo uno stato e includere invece un oggetto!

Esempio:

Crea un unico Hook che contiene un oggetto:

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'));

Poiché ora stiamo tracciando un singolo oggetto, dobbiamo fare riferimento a quell'oggetto e quindi alla proprietà di quell'oggetto durante il rendering del componente. (Es: car.brand)


Aggiornamento di oggetti e array nello stato

Quando lo stato viene aggiornato, l'intero stato viene sovrascritto.

E se volessimo solo aggiornare il colore della nostra auto?

Se solo chiamassimo setCar({color: "blue"}), questo rimuoverebbe la marca, il modello e l'anno dal nostro stato.

Possiamo usare l'operatore di diffusione JavaScript per aiutarci.

Esempio:

Usa l'operatore di diffusione JavaScript per aggiornare solo il colore dell'auto:

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'));

Poiché abbiamo bisogno del valore corrente di state, passiamo una funzione nella nostra setCarfunzione. Questa funzione riceve il valore precedente.

Restituiamo quindi un oggetto, diffondendo previousStatee sovrascrivendo solo il colore.


Mettiti alla prova con gli esercizi

Esercizio:

Completa questa istruzione per tenere traccia di una variabile "count" utilizzando l'hook useState.

import { useState } from "react";

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