ตอบสนองuseState
ตะขอ
React useState
Hook ช่วยให้เราติดตามสถานะในองค์ประกอบของฟังก์ชันได้
สถานะโดยทั่วไปหมายถึงข้อมูลหรือคุณสมบัติที่จำเป็นต้องติดตามในแอปพลิเคชัน
นำเข้า useState
ในการใช้useState
Hook ก่อนอื่นเราต้องimport
ใส่มันลงในส่วนประกอบของเรา
ตัวอย่าง:
ที่ด้านบนของimport
ส่วนประกอบuseState
Hook
import { useState } from "react";
สังเกตว่าเรากำลังทำลาย โครงสร้าง useState
เนื่องจากreact
เป็นการส่งออกที่มีชื่อ
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการทำลายโครงสร้าง โปรดดูที่ส่วนES6
เริ่มต้นuseState
เราเริ่มต้นสถานะของเราโดยการเรียกuseState
ในองค์ประกอบฟังก์ชันของเรา
useState
ยอมรับสถานะเริ่มต้นและส่งกลับค่าสองค่า:
- สถานะปัจจุบัน.
- ฟังก์ชันที่อัพเดตสถานะ
ตัวอย่าง:
เริ่มต้นสถานะที่ด้านบนขององค์ประกอบฟังก์ชัน
import { useState } from "react";
function FavoriteColor() {
const [color, setColor] = useState("");
}
โปรดสังเกตว่า เรากำลังทำลายโครงสร้างค่าที่ส่งคืนจากuseState
.
ค่าแรก, color
, คือสถานะปัจจุบันของเรา
ค่าที่สองsetColor
คือ fuction ที่ใช้ในการอัปเดตสถานะของเรา
ชื่อเหล่านี้เป็นตัวแปรที่สามารถตั้งชื่ออะไรก็ได้ที่คุณต้องการ
สุดท้ายนี้ เราตั้งค่าสถานะเริ่มต้นเป็นสตริงว่าง:useState("")
อ่านสถานะ
ตอนนี้เราสามารถรวมสถานะของเราได้ทุกที่ในองค์ประกอบของเรา
ตัวอย่าง:
ใช้ตัวแปรสถานะในองค์ประกอบที่แสดงผล
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'));
อัพเดทสถานะ
ในการอัปเดตสถานะของเรา เราใช้ฟังก์ชันตัวอัปเดตสถานะ
เราไม่ควรอัปเดตสถานะโดยตรง ตัวอย่าง: color = "red"
ไม่อนุญาต
ตัวอย่าง:
ใช้ปุ่มเพื่ออัปเดตสถานะ:
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'));
สิ่งที่สามารถระบุได้
Hook สามารถuseState
ใช้เพื่อติดตามสตริง ตัวเลข บูลีน อาร์เรย์ อ็อบเจ็กต์ และการรวมกันของสิ่งเหล่านี้!
เราสามารถสร้าง Hooks หลายสถานะเพื่อติดตามค่าแต่ละค่าได้
ตัวอย่าง:
สร้าง Hooks หลายสถานะ:
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'));
หรือเราสามารถใช้สถานะเดียวและรวมวัตถุแทนได้!
ตัวอย่าง:
สร้าง Hook เดียวที่ถือวัตถุ:
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'));
เนื่องจากตอนนี้เรากำลังติดตามวัตถุชิ้นเดียว เราจึงต้องอ้างอิงวัตถุนั้น จากนั้นจึงอ้างอิงคุณสมบัติของวัตถุนั้นเมื่อแสดงผลส่วนประกอบ (เช่น: car.brand
)
กำลังอัปเดตออบเจ็กต์และอาร์เรย์ในสถานะ
เมื่อสถานะถูกอัพเดต สถานะทั้งหมดจะถูกเขียนทับ
จะเกิดอะไรขึ้นถ้าเราต้องการอัพเดทสีรถของเราเท่านั้น?
ถ้าเราโทรไปเท่านั้นsetCar({color: "blue"})
สิ่งนี้จะลบแบรนด์ รุ่น และปีออกจากรัฐของเรา
เราสามารถใช้ตัวดำเนินการกระจาย JavaScript เพื่อช่วยเราได้
ตัวอย่าง:
ใช้ตัวดำเนินการกระจาย JavaScript เพื่ออัปเดตเฉพาะสีของรถ:
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'));
เนื่องจากเราต้องการค่าสถานะปัจจุบัน เราจึงส่งฟังก์ชันเข้าไปในsetCar
ฟังก์ชัน ของเรา ฟังก์ชันนี้รับค่าก่อนหน้า
จากนั้นเราส่งคืนวัตถุ กระจายpreviousState
และเขียนทับเฉพาะสี