Đọ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'));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.
- Trong
app/page.jsx, thêmname="text"vào ô nhập đầu tiên vàname="author"vào ô nhập thứ hai. - Trong
app/actions.js, đọc cả hai trường từformDatathay 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>
);
}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
4Máy chủ và client
Hai loại thành phầnĐọc lỗiDòng 'use client'Giữ phần client nhỏ gọnMáy chủ bên trong clientTóm tắt: máy chủ và client7Điều hướng phía máy khách
Liên kết đang hoạt độngĐiều hướng bằng codeLọc bằng URLBộ xử lý tuyến đườngÔn tập: Điều hướng2Định tuyến và liên kết
Thư mục tạo thành tuyến đườngTuyến đường lồng nhauLiên kết các trangTuyến đường độngTrang không tìm thấyÔn tập: định tuyến3Bố cục và siêu dữ liệu
Bố cục gốcĐiều hướng dùng chungBố cục lồng nhauSiêu dữ liệu trangSiêu dữ liệu độngÔn tập: bố cục6Server Actions
Server Action là gìBiểu mẫu có thể hoạt độngĐọc dữ liệu biểu mẫuLàm mới trangÔn tập: Server Actions