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
.