Үйл явдал (Events)
Хэрэглэгч товч дарах, текст бичих, маусаар хөдөлгөх бүрт event буюу үйл явдал үүсдэг. React-д эдгээр event-уудыг сонсож хариу үйлдэл хийдэг функцуудыг event handler гэнэ. Энэ хичээлд React-н event системийг гүнзгийрч судалж, практикт хамгийн их тохиолддог event-уудтай танилцана.
onClick — товч дарах
Хамгийн нийтлэг event бол onClick юм. JSX-д event handler-г { } хаалтад функц хэлбэрээр дамжуулна:
function AlertButton() {
function handleClick() {
alert("Товч дарлаа!");
}
return (
<div>
{/* Функцийн нэрийг дамжуулна — дуудахгүй */}
<button onClick={handleClick}>Дарах</button>
{/* Arrow function ашигласан inline хэлбэр */}
<button onClick={() => alert("Мөн дарлаа!")}>Бас дарах</button>
</div>
);
}
onClick={handleClick} гэж бичнэ — onClick={handleClick()} биш. Хаалт нэмбэл функцийг тэр даруй дуудаж, рендер хийхэд ажиллана, дарах үед биш.
Event Object
Handler функц дуудагдахад React автоматаар event object дамжуулдаг. Энэ объектоос дарсан товчны мэдээлэл, input-н утга зэргийг авч болно:
function InputTracker() {
function handleChange(event) {
console.log("Утга:", event.target.value);
console.log("Элементийн нэр:", event.target.name);
}
function handleKeyDown(event) {
if (event.key === "Enter") {
console.log("Enter дарлаа!");
}
}
return (
<div>
<input
name="username"
onChange={handleChange}
onKeyDown={handleKeyDown}
placeholder="Бичнэ үү..."
/>
</div>
);
}
event.target нь event үүссэн DOM элементийг заана. Input-н хувьд event.target.value нь бичсэн текстийг авна.
Нийтлэг Event-үүд
React-д дараах event-уудыг хамгийн их ашигладаг:
function EventExamples() {
return (
<div
onMouseEnter={() => console.log("Маус орлоо")}
onMouseLeave={() => console.log("Маус гарлаа")}
>
{/* onClick — дарах */}
<button onClick={() => console.log("Дарлаа")}>Дарах</button>
{/* onChange — утга өөрчлөгдөх */}
<input onChange={(e) => console.log(e.target.value)} />
{/* onFocus / onBlur — фокус авах / алдах */}
<input
onFocus={() => console.log("Фокус авлаа")}
onBlur={() => console.log("Фокус алдлаа")}
/>
{/* onSubmit — маягт илгээх */}
<form
onSubmit={(e) => {
e.preventDefault();
console.log("Маягт илгээгдлээ");
}}
>
<button type="submit">Илгээх</button>
</form>
</div>
);
}
onSubmit дотор e.preventDefault() дуудах нь хуудсыг дахин ачаалахаас сэргийлдэг — энэ бол маягттай ажиллахад заавал хэрэгтэй.
State-тай хослуулах
Event handler нь useState-тай хамт ажиллах үед component шинэчлэгддэг:
import { useState } from "react";
function LikeButton() {
const [likes, setLikes] = useState(0);
const [liked, setLiked] = useState(false);
function handleLike() {
if (liked) {
setLikes(likes - 1);
setLiked(false);
} else {
setLikes(likes + 1);
setLiked(true);
}
}
return (
<button
onClick={handleLike}
style={{ color: liked ? "#f43f5e" : "#94a3b8" }}
>
♥ {likes}
</button>
);
}
Параметр дамжуулах
Handler-д нэмэлт мэдээлэл дамжуулахдаа arrow function ашиглана:
import { useState } from "react";
function ColorPicker() {
const [selected, setSelected] = useState("blue");
const colors = ["blue", "green", "red", "purple"];
function handleSelect(color) {
setSelected(color);
}
return (
<div>
<p>Сонгосон өнгө: {selected}</p>
{colors.map((color) => (
<button
key={color}
onClick={() => handleSelect(color)}
style={{
backgroundColor: selected === color ? color : "transparent",
border: `2px solid ${color}`,
margin: "4px",
}}
>
{color}
</button>
))}
</div>
);
}
onClick={() => handleSelect(color)} гэж arrow function ашигласнаар color параметрийг хамт дамжуулж болно.
Дараагийн хичээлд:
Нөхцөлт рендер буюу тодорхой нөхцөл биелсэн үед л UI-н тодорхой хэсгийг харуулах аргыг судална. if, тернар оператор, && — аль болгохыг хэзээ ашиглахыг ойлгоно.