Menu
CoddyTech

Đọc dữ liệu biểu mẫu

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 31 trên 47.

Hàm xử lý của bạn nhận một đối số: đối tượng FormData. Đây là đối tượng có sẵn trong trình duyệt, và bạn chỉ cần dùng một phương thức của nó:

export async function addNote(formData) {
    const text = formData.get('text');
    const author = formData.get('author');
    saveNote(text, author);
}

Chuỗi bạn truyền vào get() không phải là id của ô nhập, cũng không phải nhãn của ô nhập. Đó là thuộc tính name:

<input name="author" />      →  formData.get('author')

Trường đầu vào không có name sẽ vô hình với biểu mẫu. Trường vẫn hiển thị, bạn có thể nhập vào, nhưng giá trị của nó không bao giờ được gửi đi: formData.get() trả về null. Đây là bug phổ biến nhất trong biểu mẫu dùng server action đầu tiên, và lỗi này xảy ra âm thầm.

get() luôn trả về một chuỗi (hoặc null), vì vậy cần chuyển đổi trường số:

const quantity = Number(formData.get('quantity'));
challenge icon

Thử thách

Dễ

Biểu mẫu ghi chú đã được kết nối, nhưng không lưu được gì hữu ích: các ô nhập không có name, và action lưu hai chuỗi rỗng.

  1. Trong app/page.jsx, thêm name="text" vào ô nhập đầu tiên và name="author" vào ô nhập thứ hai.
  2. Trong app/actions.js, đọc cả hai trường từ formData thay vì dùng các chuỗi rỗng.

Giữ nguyên các id và giữ nguyên lời gọi saveNote(text, author): chỉ thay đổi hai giá trị ở phía trên lời gọi đó.

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