Reaguj useState
hak
React useState
Hook pozwala nam śledzić stan w komponencie funkcyjnym.
Stan ogólnie odnosi się do danych lub właściwości, które muszą być śledzone w aplikacji.
ImportuseState
Aby użyć useState
hooka, najpierw musimy import
go do naszego komponentu.
Przykład:
W górnej części twojego komponentu, import
Hook useState
.
import { useState } from "react";
Zauważ, że dokonujemy destrukturyzacji , ponieważ jest to nazwany eksport useState
.react
Aby dowiedzieć się więcej o destrukturyzacji, zapoznaj się z sekcją ES6 .
ZainicjujuseState
Inicjujemy nasz stan, wywołując useState
nasz komponent funkcyjny.
useState
akceptuje stan początkowy i zwraca dwie wartości:
- Aktualny stan.
- Funkcja aktualizująca stan.
Przykład:
Zainicjuj stan u góry składnika funkcji.
import { useState } from "react";
function FavoriteColor() {
const [color, setColor] = useState("");
}
Zauważ, że ponownie destrukturyzujemy zwrócone wartości z useState
.
Pierwsza wartość, color
, to nasz aktualny stan.
Druga wartość, setColor
, to funkcja używana do aktualizacji naszego stanu.
Nazwy te są zmiennymi, które można nazwać w dowolny sposób.
Na koniec ustawiamy stan początkowy na pusty ciąg:useState("")
Zostać certyfikowanym!
95 $ ZAPISZ
Przeczytaj stan
Możemy teraz dołączyć nasz stan w dowolnym miejscu naszego komponentu.
Przykład:
Użyj zmiennej state w renderowanym komponencie.
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'));
Aktualizuj stan
Aby zaktualizować nasz stan, używamy naszej funkcji aktualizacji stanu.
Nigdy nie powinniśmy bezpośrednio aktualizować stanu. Np.: color = "red"
nie jest dozwolone.
Przykład:
Użyj przycisku, aby zaktualizować stan:
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 może zawierać
Hook może być używany do useState
śledzenia ciągów, liczb, wartości logicznych, tablic, obiektów i dowolnej ich kombinacji!
Moglibyśmy stworzyć wiele stanów hooków do śledzenia poszczególnych wartości.
Przykład:
Utwórz hooki z wieloma stanami:
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'));
Lub możemy po prostu użyć jednego stanu i zamiast tego dołączyć obiekt!
Przykład:
Utwórz pojedynczy Hook, który trzyma obiekt:
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'));
Ponieważ śledzimy teraz pojedynczy obiekt, podczas renderowania komponentu musimy odwołać się do tego obiektu, a następnie do właściwości tego obiektu. (np.: car.brand
)
Aktualizowanie obiektów i tablic w stanie
Gdy stan jest aktualizowany, cały stan zostaje nadpisany.
Co jeśli chcemy tylko zaktualizować kolor naszego samochodu?
Gdybyśmy tylko zadzwonili setCar({color: "blue"})
, usunęłoby to markę, model i rok z naszego stanu.
Możemy użyć operatora rozprzestrzeniania JavaScript, aby nam pomóc.
Przykład:
Użyj operatora rozprzestrzeniania JavaScript, aby zaktualizować tylko kolor samochodu:
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'));
Ponieważ potrzebujemy aktualnej wartości stanu, przekazujemy funkcję do naszej setCar
funkcji. Ta funkcja otrzymuje poprzednią wartość.
Następnie zwracamy obiekt, rozkładając previousState
i nadpisując tylko kolor.