Reagovat useState
Hook
React useState
Hook 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 useState
Hook používat, musíme import
jej nejprve začlenit do naší komponenty.
Příklad:
V horní části vaší součásti import
je useState
hák.
import { useState } from "react";
Všimněte si, že provádíme destrukturaci useState
z 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 useState
naší funkční komponenty.
useState
př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("")
Získejte certifikaci!
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
useState
Hook 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ší setCar
funkce. Tato funkce obdrží předchozí hodnotu.
Poté vrátíme objekt, rozprostřeme previousState
a přepíšeme pouze barvu.