Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

قراءة بيانات النموذج

جزء من قسم أساسيات Next.js في رحلة React على Coddy — الدرس 31 من 47.

يتلقى الـ action الخاص بك وسيطًا واحدًا: كائن FormData. وهو عنصر مدمج في المتصفح، وتحتاج فقط إلى دالة واحدة منه:

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

السلسلة النصية التي تقوم بتمريرها إلى get() ليست معرف المدخل id، وليست التسمية التوضيحية الخاصة به (label). بل هي خاصية name:

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

إن أي عنصر مدخل لا يحتوي على name يكون غير مرئي للنموذج. يتم عرضه على الشاشة، ويمكنك الكتابة فيه، ولكن قيمته ببساطة لا تصل أبداً: يُرجع formData.get() القيمة null. هذا هو الخطأ الأكثر شيوعاً في أول نموذج لـ server-action، وهو يفشل بهدوء.

تعيد get() دائمًا سلسلة نصية (أو null)، لذلك يحتاج حقل الرقم إلى تحويل:

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

التحدي

سهل

تم توصيل نموذج الـ notes، ولكن لا يتم حفظ أي شيء مفيد: الـ input ليس لديها name، والـ action يحفظ سلسلتين نصيتين فارغتين.

  1. في app/page.jsx، أضف name="text" إلى الـ input الأول و name="author" إلى الثاني.
  2. في app/actions.js، اقرأ كلا الحقلين من formData بدلاً من استخدام السلاسل النصية الفارغة.

احتفظ بالـ ids كما هي، واحتفظ باستدعاء saveNote(text, author): فقط القيمتان اللتان فوقه هما ما سيتغيران.

جرّب بنفسك

import './globals.css';

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

export default function RootLayout({ children }) {
    return (
        <html lang="en">
            <body>
                {children}
            </body>
        </html>
    );
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس أساسيات Next.js