getInitialProps
معلومة مفيدة:
getInitialPropsهو واجهة برمجة تطبيقات قديمة. نوصي باستخدامgetStaticPropsأوgetServerSidePropsبدلاً من ذلك.
getInitialProps هي دالة async يمكن إضافتها إلى مكون React المُصدر بشكل افتراضي للصفحة. ستعمل على جانب الخادم ومرة أخرى على جانب العميل أثناء انتقالات الصفحة. سيتم تمرير نتيجة الدالة إلى مكون React كـ props.
import { NextPageContext } from 'next'
Page.getInitialProps = async (ctx: NextPageContext) => {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const json = await res.json()
return { stars: json.stargazers_count }
}
export default function Page({ stars }: { stars: number }) {
return stars
}Page.getInitialProps = async (ctx) => {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const json = await res.json()
return { stars: json.stargazers_count }
}
export default function Page({ stars }) {
return stars
}معلومة مفيدة:
- يتم تسلسل البيانات المرتجعة من
getInitialPropsعند عرض الخادم. تأكد من أن الكائن المرتجع منgetInitialPropsهو كائن عاديObject، وليس باستخدامDateأوMapأوSet.- لتحميل الصفحة الأولي، ستعمل
getInitialPropsعلى الخادم فقط. ثم ستعملgetInitialPropsأيضًا على العميل عند الانتقال إلى مسار مختلف باستخدام مكونnext/linkأو باستخدامnext/router.- إذا تم استخدام
getInitialPropsفي ملف_app.jsمخصص، وكانت الصفحة التي يتم الانتقال إليها تستخدمgetServerSideProps، فإنgetInitialPropsستعمل أيضًا على الخادم.
كائن السياق (Context Object)
تستقبل getInitialProps وسيطًا واحدًا يسمى context، وهو كائن يحتوي على الخصائص التالية:
| الاسم | الوصف |
|---|---|
pathname | المسار الحالي، مسار الصفحة في /pages |
query | سلسلة استعلام URL، محللة ككائن |
asPath | String للمسار الفعلي (بما في ذلك الاستعلام) المعروض في المتصفح |
req | كائن طلب HTTP (على الخادم فقط) |
res | كائن استجابة HTTP (على الخادم فقط) |
err | كائن خطأ في حالة حدوث أي خطأ أثناء العرض |
محاذير
- يمكن استخدام
getInitialPropsفقط في ملفات المستوى الأعلى داخلpages/، وليس في المكونات المتداخلة. لجلب بيانات متداخلة على مستوى المكون، فكر في استكشاف موجه التطبيق (App Router). - بغض النظر عما إذا كان مسارك ثابتًا أو ديناميكيًا، أي بيانات يتم إرجاعها من
getInitialPropsكـpropsستكون قابلة للفحص على جانب العميل في HTML الأولي. هذا للسماح للصفحة بأن يتم ترطيبها (hydrate) بشكل صحيح. تأكد من عدم تمرير أي معلومات حساسة لا يجب أن تكون متاحة على العميل فيprops.