#Frontend & Web UI
Deep-dive React 19 Actions và useActionState: Đơn giản hóa quản lý Form không cần thư viện ngoài
📖 2 phút đọc 💬 1 phản hồi
⚡ Tóm tắt 30 giây bởi TopDev AI
AI Overview Tạm biệt những mớ bòng bong useState trong Form Trước đây khi xử lý một Form nhập liệu đơn giản trong React, bạn thường phải tạo ít nhất 3 state: Và phải nhớ gọi e.preventDefault, bọc khối try/catch,…
☰ Mục lục bài viết (4 phần) Mở / Đóng mục lục
Tạm biệt những mớ bòng bong useState trong Form#
Trước đây khi xử lý một Form nhập liệu đơn giản trong React, bạn thường phải tạo ít nhất 3 state:
TSX
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState(null);
const [data, setData] = useState(null);
Và phải nhớ gọi e.preventDefault(), bọc khối try/catch, và reset state thủ công mỗi lần submit.
React 19 giới thiệu khái niệm Actions cùng bộ ba hook mới: useActionState, useFormStatus, và useOptimistic.
Quản lý Form thanh lịch với useActionState#
TSX
import { useActionState } from 'react';
// Hàm action có thể chạy async, nhận state trước đó và FormData
async function updateUsernameAction(previousState: any, formData: FormData) {
const newName = formData.get('username') as string;
try {
const updatedUser = await apiUpdateName(newName);
return { success: true, user: updatedUser, error: null };
} catch (err: any) {
return { success: false, user: null, error: err.message };
}
}
export function EditProfileForm() {
const [state, formAction, isPending] = useActionState(updateUsernameAction, null);
return (
<form action={formAction} className="space-y-4">
<input name="username" defaultValue="Nam Hoàng" className="border p-2 rounded" />
<button type="submit" disabled={isPending} className="bg-brand-500 text-white px-4 py-2 rounded">
{isPending ? 'Đang lưu...' : 'Cập nhật'}
</button>
{state?.error && <p className="text-red-500">{state.error}</p>}
{state?.success && <p className="text-green-500">Đã cập nhật thành công!</p>}
</form>
);
}
3 Lợi thế đột phá của React 19 Actions#
- Tự động quản lý Pending State: Biến
isPendingtự động chuyển thànhtruekhi action bắt đầu và chuyển vềfalsekhi hoàn tất mà không cần viếtsetIsLoading. - Hỗ trợ Progressive Enhancement: Form có thể hoạt động ngay cả khi JavaScript chưa kịp tải xong ở trình duyệt!
- Reset Form tự động: Khi action thành công, React tự động dọn dẹp các trường nhập liệu nếu được cấu hình.
Góc thảo luận#
Anh em đã nâng cấp dự án lên React 19 chưa? Có anh em nào vẫn đang dùng React Hook Form hay Formik không?
Xem thêm nội dung liên quan:
Tác giả bài viết
Lan Anh (Senior Frontend)
Tham gia từ thg 6 2026 · 15 bài viết · 25 phản hồi
Thảo luận
1 phản hồi
💬
Tham gia thảo luận
Cộng đồng mở · Đăng nhập 1-chạm qua Google
Bài liên quan trong #Frontend & Web UI
-
Xây dựng Voice AI Agent thời gian thực với WebRTC và Whisper Live: Độ trễ dưới 500ms
Lan Anh (Senior Frontend) · 💬 1 -
Tối ưu SEO cho Website Client-Side Rendering: Dynamic Rendering vs Static Export
Lan Anh (Senior Frontend) · 💬 1 -
Debug Memory Leak trong Single Page Application bằng Chrome DevTools Memory Profiler
Lan Anh (Senior Frontend) · 💬 1 -
Viết Component Accessible (a11y) chuẩn WAI-ARIA: Giúp website thân thiện với mọi đối tượng
Lan Anh (Senior Frontend) · 💬 1 -
Server-Sent Events (SSE) vs WebSocket: Lựa chọn giao thức thời gian thực cho tính năng AI Streaming
Quốc Bảo (Fullstack Developer) · 💬 1