انتقل إلى المحتوى
TopClass UI

النموذج

نموذج عادي يُرسَل بلا سكربت، وFormAction الذي يجيب إجراؤه بأخطاء تصل إلى الحقول المطابقة لها.

split - الحجم لم يُقَس بعد

النموذج

split - الحجم لم يُقَس بعد

نموذج عادي يُرسَل بلا سكربت، وFormAction الذي يجيب إجراؤه بأخطاء تصل إلى الحقول المطابقة لها.

تثبيت
We never share it

الشيفرة

form.tsx
import { Button } from 'topclassui/button'
import { Field } from 'topclassui/field'
import { Input } from 'topclassui/input'
import { Form } from 'topclassui/form'

/** The subscribe form of "Your first component": it posts to /subscribe with no script, and the browser asks for the email first. */
export default function Demo() {
  return (
    <Form action="/subscribe" method="post" className="flex max-w-sm flex-col gap-4">
      <Field name="email" label="Email" hint="We never share it" required>
        {(control) => <Input {...control} type="email" autoComplete="email" fullWidth />}
      </Field>
      <Button type="submit">Subscribe</Button>
    </Form>
  )
}

نموذج الخادم لا يستطيع عرض ما يعيده إجراؤه: أعطِ كل Field خطأه error بنفسك، أو استخدم FormAction في ملف عميل.

أو استورده من الحزمة

topclassui/form
import { Form } from 'topclassui/form'

ثبّت مرة واحدة:npm i topclassui@beta zod

أمثلة

  • Form يضيف التصدير المسطّح ودمج className فقط: بلا noValidate، فيعمل فحص required الخاص بالمتصفح قبل الترطيب وبعده.
  • FormAction يشغّل useActionState من React: يعيد action(state, formData) الحالة التالية، وأخطاؤها errors مرتبة باسم الحقل، مثل fieldErrors في Zod.
  • يعيد React تعيين النموذج حين يستقر الإجراء، لذا يعيد الإجراء الذي يرجع أخطاءً القيمَ المرسلة أيضًا، فتعيدها الدالة الابن قيمًا افتراضية.
  • بلا سكربت لا تستطيع دالة العميل الإرسال: مرّر permalink مع Server Action.
basic
We never share it
server-errors
This email is already subscribed
What can we help with?
Write at least 20 characters
Leave out the links
form-action
Try taken@example.com

بالعربية، من اليمين إلى اليسار
لن نشاركه مع أحد

الخصائص

لا خصائص خاصة به: يأخذ سمات العنصر الذي يعرضه.

لوحة المفاتيح وإمكانية الوصول

لوحة مفاتيح Form
المفاتيحما يفعله
Enterيرسل النموذج من حقل نصي، كما يفعل النموذج الأصلي.
  • بعد إجابة فيها أخطاء ينتقل التركيز إلى أول عنصر يحمل aria-invalid="true"، ولا يحدث ذلك أبدًا في العرض الأول.
  • يحمل النموذج aria-busy ما دام الإجراء قيد التنفيذ.

من اليمين إلى اليسار

لا شيء خاص به ينعكس: الحقول داخله تُقرأ من اليمين، عبر أصنافها المنطقية الخاصة.

الخادم والمتصفح

يُعرض على الخادم، والجزء التفاعلي مكوّن متصفح لا يُرسل إلا عند استخدامه.

الملفات: index.tsx, client.tsx.

على الشارة: split - الحجم لم يُقَس بعد.