Menu
CoddyTech

Biểu mẫu có thể hoạt động

Thuộc phần Kiến thức thiết yếu về Next.js trong hành trình React của Coddy. Bài học 30 trên 47.

Trong HTML thuần, action của biểu mẫu là một URL để gửi yêu cầu POST đến. Trong Next.js, bạn có thể truyền vào đó một hàm (function):

import { addItem } from './actions';

<form action={addItem}>
    <input name="text" />
    <button type="submit">Add</button>
</form>

Khi gửi biểu mẫu, React làm ba việc thay bạn: ngăn trình duyệt gửi biểu mẫu theo cách thông thường khiến trang tải lại, thu thập các trường có tên của biểu mẫu vào một đối tượng FormData và gọi hàm xử lý của bạn với đối tượng đó.

Hãy để ý những gì không có ở đây: không có onSubmit, không có event.preventDefault(), không có trạng thái. Và trang này vẫn là một Server Component: action là dữ liệu được truyền đi, không phải trình xử lý sự kiện, nên nó dễ dàng vượt qua ranh giới.

Có một điều bạn cần chuẩn bị: mục đã được lưu, nhưng danh sách trên màn hình vẫn chưa thay đổi. Máy chủ đã dựng trang và chưa có gì yêu cầu trang tải lại. Sau hai bài học nữa, bạn sẽ sửa việc này chỉ bằng một dòng.

challenge icon

Thử thách

Người mới

Danh sách mua sắm có một ô nhập và một nút, nhưng chúng chưa kết nối với máy chủ. Mình đã viết sẵn action cho bạn trong app/actions.js.

  1. Trong app/page.jsx, nhập addItem từ './actions'.
  2. Bọc ô nhập và nút trong <form> có id="add-form".
  3. Đặt action={addItem} cho biểu mẫu đó.

Giữ nguyên name="text" của ô nhập: action đọc trường này theo tên đó.

Tự làm thử

import './globals.css';

export const metadata = {
    title: 'My App',
};

export default function RootLayout({ children }) {
    return (
        <html lang="en">
            <body>
                {children}
            </body>
        </html>
    );
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức thiết yếu về Next.js