Reagovat useStateHook


React useStateHook nám umožňuje sledovat stav ve funkční komponentě.

Stav obecně odkazuje na data nebo vlastnosti, které je třeba v aplikaci sledovat.


Import useState

Abychom mohli useStateHook používat, musíme importjej nejprve začlenit do naší komponenty.

Příklad:

V horní části vaší součásti importje useStatehák.

import { useState } from "react";

Všimněte si, že provádíme destrukturaci useStatez react, protože jde o pojmenovaný export.

Chcete-li se dozvědět více o destrukturalizaci, podívejte se do sekce ES6 .


InicializovatuseState

Náš stav inicializujeme voláním useStatenaší funkční komponenty.

useStatepřijímá počáteční stav a vrací dvě hodnoty:

  • Současný stav.
  • Funkce, která aktualizuje stav.

Příklad:

Inicializujte stav v horní části funkční komponenty.

import { useState } from "react";

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

Všimněte si, že opět ničíme vrácené hodnoty z useState.

První hodnota, color, je náš současný stav.

Druhá hodnota, setColor, je funkce, která se používá k aktualizaci našeho stavu.

Tato jména jsou proměnné, které lze pojmenovat jakkoli chcete.

Nakonec nastavíme počáteční stav na prázdný řetězec:useState("")


w3schools CERTIFIED . 2022

Získejte certifikaci!

Dokončete moduly React, proveďte cvičení, udělejte zkoušku a získejte certifikaci w3schools!!

95 $ PŘIHLÁSIT SE

Přečtěte si Stát

Nyní můžeme náš stav zahrnout kamkoli do naší komponenty.

Příklad:

Použijte proměnnou stavu v renderované komponentě.

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


Aktualizovat stav

K aktualizaci našeho stavu používáme naši funkci aktualizace stavu.

Nikdy bychom neměli přímo aktualizovat stav. Příklad: color = "red"není povoleno.

Příklad:

Pomocí tlačítka aktualizujte stav:

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


Co může stát držet

useStateHook lze použít ke sledování řetězců, čísel, booleanů, polí, objektů a jakékoli jejich kombinace !

Mohli bychom vytvořit více stavových háčků pro sledování jednotlivých hodnot.

Příklad:

Vytvořte více stavových háčků:

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

Nebo můžeme použít pouze jeden stav a místo něj zahrnout objekt!

Příklad:

Vytvořte jeden hák, který drží objekt:

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

Protože nyní sledujeme jeden objekt, musíme při vykreslování komponenty odkazovat na tento objekt a poté na vlastnost tohoto objektu. (Př.: car.brand)


Aktualizace objektů a polí ve stavu

Při aktualizaci stavu se celý stav přepíše.

Co když chceme aktualizovat pouze barvu našeho auta?

Pokud bychom zavolali pouze setCar({color: "blue"}), odstranili bychom značku, model a rok z našeho státu.

K tomu nám může pomoci operátor šíření JavaScriptu.

Příklad:

Pomocí operátoru šíření JavaScriptu aktualizujte pouze barvu vozu:

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

Protože potřebujeme aktuální hodnotu stavu, předáme funkci do naší setCarfunkce. Tato funkce obdrží předchozí hodnotu.

Poté vrátíme objekt, rozprostřeme previousStatea přepíšeme pouze barvu.


Otestujte se pomocí cvičení

Cvičení:

Vyplňte toto prohlášení, chcete-li sledovat proměnnou "count" pomocí useState Hook.

import { useState } from "react";

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