0Pricing
React Academy · درس

إجراءات الخادم لطفرات البيانات

عرّف دوال 'use server' لمعالجة طفرات النماذج وأبطِل التخزين المؤقت باستخدام revalidatePath.

إجراءات الخادم لطفرات البيانات درس مجاني في React Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

ما المقصود بإجراءات الخادم؟

إجراءات الخادم هي دوال غير متزامنة تحمل الوسم 'use server' وتعمل حصريًا على الخادم. وهي تتيح إرسال النماذج وتعديل البيانات من دون كتابة معالجات لمسارات API.

تعريف إجراء خادم

أضف 'use server' في أعلى الدالة أو الملف لإنشاء إجراء خادم. ولا يمكن تعريفه إلا في مكوّنات الخادم أو في ملفات actions.ts مخصصة.

// app/actions.ts
'use server';

import { revalidatePath } from 'next/cache';
import { redirect } from 'next/navigation';

export async function createPost(formData: FormData) {
  const title = formData.get('title') as string;
  await db.post.create({ data: { title } });
  revalidatePath('/blog');
  redirect('/blog');
}

استخدام الإجراءات في النماذج

مرّر دالة الإجراء إلى الخاصية action في النموذج. لا حاجة إلى onSubmit أو معالج أحداث؛ إذ يعمل Next.js على تسلسل بيانات النموذج واستدعاء الإجراء على الخادم.

import { createPost } from './actions';

export default function NewPostForm() {
  return (
    <form action={createPost}>
      <input name="title" placeholder="Post title" required />
      <button type="submit">Create</button>
    </form>
  );
}

خطاف useActionState

يغلّف useActionState (في React 19) إجراءً لتتبع حالة الانتظار وتلقّي القيمة التي يعيدها الإجراء داخل المكوّن.

'use client';
import { useActionState } from 'react';
import { createPost } from './actions';

const initialState = { error: null };

export function PostForm() {
  const [state, action, isPending] = useActionState(createPost, initialState);
  return (
    <form action={action}>
      {state.error && <p className="error">{state.error}</p>}
      <input name="title" />
      <button disabled={isPending}>{isPending ? 'Creating...' : 'Create'}</button>
    </form>
  );
}

إرجاع أخطاء التحقق

أعِد كائنًا من الإجراء بدلًا من إطلاق استثناء، لتمرير أخطاء التحقق مرة أخرى إلى النموذج عبر useActionState.

export async function createPost(prevState: any, formData: FormData) {
  'use server';
  const title = formData.get('title') as string;
  if (!title || title.length < 3) {
    return { error: 'Title must be at least 3 characters' };
  }
  await db.post.create({ data: { title } });
  revalidatePath('/blog');
  redirect('/blog');
}

إجراءات الخادم في معالجات الأحداث

استدعِ إجراءات الخادم من معالجات الأحداث في مكوّنات العميل، وليس من إجراءات النماذج فقط، وذلك باستيرادها واستدعائها مباشرةً.

'use client';
import { deletePost } from './actions';

export function DeleteButton({ id }: { id: string }) {
  return (
    <button onClick={() => deletePost(id)}>
      Delete
    </button>
  );
}

إجراءات الخادم المضمّنة

عرّف إجراءات الخادم مضمّنةً داخل مكوّن خادم باستخدام دالة تحتوي على 'use server'؛ وهذا مفيد لمنطق التعديل الموجود بجوار المكوّن.

export default function PostPage({ post }) {
  async function updatePost(formData: FormData) {
    'use server';
    await db.post.update({ where: { id: post.id }, data: { title: formData.get('title') as string } });
    revalidatePath(`/blog/${post.id}`);
  }

  return (
    <form action={updatePost}>
      <input name="title" defaultValue={post.title} />
      <button type="submit">Save</button>
    </form>
  );
}

استخدام useOptimistic مع إجراءات الخادم

استخدم useOptimistic مع إجراءات الخادم لتحديث واجهة المستخدم فورًا أثناء تشغيل الإجراء في الخلفية.

'use client';
import { useOptimistic } from 'react';
import { addItem } from './actions';

export function TodoList({ items }) {
  const [optimisticItems, addOptimistic] = useOptimistic(items, (state, newItem) => [...state, newItem]);
  return (
    <form action={async (formData) => {
      addOptimistic({ id: 'temp', text: formData.get('text') });
      await addItem(formData);
    }}>
      <ul>{optimisticItems.map(i => <li key={i.id}>{i.text}</li>)}</ul>
      <input name="text" /><button>Add</button>
    </form>
  );
}

اعتبارات أمنية

إجراءات الخادم هي نقاط نهاية POST في الأساس. تحقّق دائمًا من المدخلات ونقِّها على الخادم، وتحقق من المصادقة، واستخدم الحماية من CSRF (يتولى Next.js ذلك تلقائيًا للطلبات من الأصل نفسه).

إعادة التحقق بعد عمليات التعديل

استدعِ revalidatePath() أو revalidateTag() بعد إجراء تعديل لمسح ذاكرات التخزين المؤقت ذات الصلة، حتى يعكس تحميل الصفحة التالي التغيير.

تحقق سريع

كيف تمرّر إجراء خادم إلى نموذج في Next.js App Router؟

مراجعة

إجراءات الخادم هي دوال غير متزامنة تحمل الوسم 'use server' وتتولى عمليات التعديل على الخادم. اربطها بالنماذج عبر الخاصية action، وتتبع حالتها باستخدام useActionState، وأعِد الأخطاء بدلًا من إطلاق الاستثناءات للتحقق، وأعد التحقق من ذاكرات التخزين المؤقت بعد عمليات التعديل.

الأسئلة الشائعة

هل درس «إجراءات الخادم لطفرات البيانات» مجاني؟

نعم — نص درس «إجراءات الخادم لطفرات البيانات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «إجراءات الخادم لطفرات البيانات»؟

عرّف دوال 'use server' لمعالجة طفرات النماذج وأبطِل التخزين المؤقت باستخدام revalidatePath. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «إجراءات الخادم لطفرات البيانات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ‏fetch() مع خيارات التخزين المؤقت في Next.js
  2. ‏unstable_cache وReact cache()
  3. إعادة التوليد الساكن التدريجي (ISR)
  4. إجراءات الخادم لطفرات البيانات
← العودة إلى React Academy