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)
تستقبل getInitialProps
وسيطًا واحدًا يسمى context
، وهو كائن يحتوي على الخصائص التالية:
الاسم | الوصف |
---|---|
pathname | المسار الحالي، مسار الصفحة في /pages |
query | سلسلة استعلام URL، محللة ككائن |
asPath | String للمسار الفعلي (بما في ذلك الاستعلام) المعروض في المتصفح |
req | كائن طلب HTTP (على الخادم فقط) |
res | كائن استجابة HTTP (على الخادم فقط) |
err | كائن خطأ في حالة حدوث أي خطأ أثناء العرض |
محاذير
- يمكن استخدام
getInitialProps
فقط في ملفات المستوى الأعلى فيpages/
، وليس في المكونات المتداخلة. لجلب بيانات متداخلة على مستوى المكون، فكر في استكشاف موجه التطبيق (App Router). - بغض النظر عما إذا كان مسارك ثابتًا أو ديناميكيًا، أي بيانات يتم إرجاعها من
getInitialProps
كـprops
ستكون قابلة للفحص على جانب العميل في HTML الأولي. هذا للسماح للصفحة بأن يتم ترطيبها (hydrate) بشكل صحيح. تأكد من عدم تمرير أي معلومات حساسة لا يجب أن تكون متاحة على العميل فيprops
.