getServerSideProps
عند تصدير دالة تسمى getServerSideProps
(عرض من جانب الخادم - SSR) من صفحة، سيقوم Next.js بتحضير هذه الصفحة مسبقًا في كل طلب باستخدام البيانات التي تُرجعها getServerSideProps
. هذا مفيد إذا كنت تريد جلب بيانات تتغير بشكل متكرر، وتريد تحديث الصفحة لعرض أحدث البيانات.
import type { InferGetServerSidePropsType, GetServerSideProps } from 'next'
type Repo = {
name: string
stargazers_count: number
}
export const getServerSideProps = (async () => {
// جلب البيانات من API خارجي
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const repo: Repo = await res.json()
// تمرير البيانات إلى الصفحة عبر props
return { props: { repo } }
}) satisfies GetServerSideProps<{ repo: Repo }>
export default function Page({
repo,
}: InferGetServerSidePropsType<typeof getServerSideProps>) {
return (
<main>
<p>{repo.stargazers_count}</p>
</main>
)
}
export async function getServerSideProps() {
// جلب البيانات من API خارجي
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const repo = await res.json()
// تمرير البيانات إلى الصفحة عبر props
return { props: { repo } }
}
export default function Page({ repo }) {
return (
<main>
<p>{repo.stargazers_count}</p>
</main>
)
}
يمكنك استيراد وحدات في النطاق العلوي لاستخدامها في getServerSideProps
. الوحدات المستوردة لن يتم تضمينها لجانب العميل. هذا يعني أنه يمكنك كتابة كود خاص بجانب الخادم مباشرة في getServerSideProps
، بما في ذلك جلب البيانات من قاعدة البيانات الخاصة بك.
معامل Context
معامل context
هو كائن يحتوي على المفاتيح التالية:
الاسم | الوصف |
---|---|
params | إذا كانت هذه الصفحة تستخدم مسار ديناميكي، فإن params يحتوي على معلمات المسار. إذا كان اسم الصفحة هو [id].js ، فإن params سيبدو مثل { id: ... } . |
req | كائن HTTP IncomingMessage، مع خاصية إضافية cookies ، وهي كائن بمفاتيح نصية تُرسم إلى قيم نصية لملفات تعريف الارتباط. |
res | كائن استجابة HTTP . |
query | كائن يمثل سلسلة الاستعلام، بما في ذلك معلمات المسار الديناميكي. |
preview | (مهمل لصالح draftMode ) preview يكون true إذا كانت الصفحة في وضع المعاينة وfalse بخلاف ذلك. |
previewData | (مهمل لصالح draftMode ) بيانات المعاينة التي تم تعيينها بواسطة setPreviewData . |
draftMode | draftMode يكون true إذا كانت الصفحة في وضع المسودة وfalse بخلاف ذلك. |
resolvedUrl | نسخة طبيعية من URL الطلب التي تزيل بادئة _next/data لانتقالات العميل وتتضمن قيم استعلام أصلية. |
locale | يحتوي على اللغة النشطة (إذا تم تمكينها). |
locales | يحتوي على جميع اللغات المدعومة (إذا تم تمكينها). |
defaultLocale | يحتوي على اللغة الافتراضية المكونة (إذا تم تمكينها). |
قيم إرجاع getServerSideProps
يجب أن تُرجع دالة getServerSideProps
كائنًا يحتوي على أي من الخصائص التالية:
props
كائن props
هو زوج مفتاح-قيمة، حيث يتم استقبال كل قيمة بواسطة مكون الصفحة. يجب أن يكون كائنًا قابلًا للتسلسل بحيث يمكن تسلسل أي props يتم تمريرها باستخدام JSON.stringify
.
export async function getServerSideProps(context) {
return {
props: { message: `Next.js رائع` }, // سيتم تمريرها إلى مكون الصفحة كـ props
}
}
notFound
القيمة المنطقية notFound
تسمح للصفحة بإرجاع حالة 404
وصفحة 404. مع notFound: true
، سترجع الصفحة 404
حتى لو كانت هناك صفحة تم إنشاؤها بنجاح من قبل. هذا مخصص لدعم حالات الاستخدام مثل المحتوى الذي ينشئه المستخدم ويتم إزالته من قبل المؤلف.
export async function getServerSideProps(context) {
const res = await fetch(`https://.../data`)
const data = await res.json()
if (!data) {
return {
notFound: true,
}
}
return {
props: { data }, // سيتم تمريرها إلى مكون الصفحة كـ props
}
}
redirect
كائن redirect
يسمح بإعادة التوجيه إلى موارد داخلية وخارجية. يجب أن يتطابق مع الشكل { destination: string, permanent: boolean }
. في بعض الحالات النادرة، قد تحتاج إلى تعيين رمز حالة مخصص لعملاء HTTP
القديمة لإعادة التوجيه بشكل صحيح. في هذه الحالات، يمكنك استخدام خاصية statusCode
بدلاً من خاصية permanent
، ولكن ليس كلاهما.
export async function getServerSideProps(context) {
const res = await fetch(`https://.../data`)
const data = await res.json()
if (!data) {
return {
redirect: {
destination: '/',
permanent: false,
},
}
}
return {
props: {}, // سيتم تمريرها إلى مكون الصفحة كـ props
}
}
سجل الإصدارات
الإصدار | التغييرات |
---|---|
v13.4.0 | موجه التطبيق أصبح الآن مستقرًا مع جلب بيانات مبسط |
v10.0.0 | تمت إضافة خيارات locale ، locales ، defaultLocale ، و notFound . |
v9.3.0 | تم تقديم getServerSideProps . |