0Pricing
TypeScript Academy · درس

جلب البيانات وكتابة الإجراءات

اجلب البيانات على الخادم باستخدام JSON ذي أنواع، وتحكم في التخزين المؤقت وإعادة التحقق، وأنشئ Server Actions ذات أنواع للنماذج والتعديلات.

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

مقدمة

الهدف: جلب البيانات في مكوّنات الخادم باستخدام JSON ذي أنواع، وضبط التخزين المؤقت/إعادة التحقق، وإنشاء Server Actions ذات أنواع لعمليات التعديل.

  • مساعدات fetch ذات أنواع
  • التخزين المؤقت: revalidate مقابل no-store
  • Server Actions مع النماذج

مساعد fetch ذي أنواع

أنشئ مساعدًا صغيرًا json<T> لفك ترميز الاستجابات وإلقاء استثناء عند الحصول على استجابة غير 200. استخدم revalidate للتخزين المؤقت الشبيه بـ ISR.

// app/lib/http.ts
export async function json<T>(res: Response): Promise<T> {
  if (!res.ok) throw new Error(`HTTP ${res.status}`)
  return (await res.json()) as T
}

// app/page.tsx (server)
export type Post = { id: number; title: string }

export default async function Page() {
  const res = await fetch("https://example.com/api/posts", { next: { revalidate: 60 } })
  const posts = await json<Post[]>(res)
  return (
    <main style={{ display: "grid", gap: 8 }}>
      <h1>Posts</h1>
      <ul>{posts.map(p => <li key={p.id}>{p.title}</li>)}</ul>
    </main>
  )
}

عناصر التحكم في التخزين المؤقت

استخدم cache: "no-store" للطلبات الديناميكية بالكامل، أو next.revalidate لإعادة الإنشاء بعد N من الثواني.

// app/page.tsx (server)
export default async function Page() {
  const res = await fetch("https://example.com/api/now", { cache: "no-store" })
  const data = await res.json() as { now: string }
  return <pre>{JSON.stringify(data, null, 2)}</pre>
}

// Alternative: revalidate per request
// fetch(url, { next: { revalidate: 5 } })

وحدة Server Action

أضف "use server" في الوحدة (أو داخل الدالة). تعمل Server Actions على الخادم ويمكنها استدعاء واجهات API الخاصة بالخادم، ثم revalidatePath.

// app/actions.ts
"use server"
import { revalidatePath } from "next/cache"

export async function createPost(form: FormData): Promise<{ id: string }> {
  const title = String(form.get("title") || "")
  if (!title) throw new Error("title required")
  // pretend DB insert
  const id = Math.random().toString(36).slice(2)
  revalidatePath("/")
  return { id }
}

نموذج العميل باستخدام action

اربط Server Action بالخاصية action في النموذج. استخدم useTransition لعرض واجهة المستخدم أثناء الانتظار. تنتقل الأنواع من توقيع الإجراء.

"use client"
import { useTransition } from "react"
import { createPost } from "../actions"

export default function NewPost() {
  const [pending, start] = useTransition()

  const onSubmit = async (formData: FormData) => {
    await createPost(formData)
  }

  return (
    <form action={(fd) => start(() => onSubmit(fd))} style={{ display: "grid", gap: 8 }}>
      <input name="title" placeholder="Title" />
      <button disabled={pending}>{pending ? "Creating…" : "Create"}</button>
    </form>
  )
}

نصائح واحتياطات

نصائح:

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

التحقق من كتابة Server Action

تحقق سريع: كيف تضع علامة على دالة بوصفها Server Action وتحافظ على الأنواع؟

خلاصة

خلاصة: فك ترميز JSON باستخدام مساعد ذي أنواع، واختر no-store أو revalidate بحكمة، واستخدم Server Actions ذات أنواع لإجراء التعديلات وإعادة التحقق بأمان.

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

هل درس «جلب البيانات وكتابة الإجراءات» مجاني؟

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

ماذا ستتعلم في «جلب البيانات وكتابة الإجراءات»؟

اجلب البيانات على الخادم باستخدام JSON ذي أنواع، وتحكم في التخزين المؤقت وإعادة التحقق، وأنشئ Server Actions ذات أنواع للنماذج والتعديلات. تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

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

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

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

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

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

  1. أنواع App Router؛ مكوّنات الخادم مقابل العميل
  2. جلب البيانات وكتابة الإجراءات
  3. كتابة متغيرات البيئة والإعدادات
← العودة إلى TypeScript Academy