الفرق بين المراجعتين لصفحة: «Next.js/custom app»
أنشأ الصفحة ب' = التطبيقات المخصصة باستخدام المكوّن <code>App</code> = تستخدم المكوّن لتهيئة الصفحات، وتتيح لك تجا...' |
جميل-بيلوني (نقاش | مساهمات) طلا ملخص تعديل |
||
(6 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:استخدام تطبيق مخصص App في Next.js}}</noinclude> | |||
'''ملاحظة''': بدأت Next.js في الإصدار 13 دعم استخدام المجلد <code>/app</code> كنسخة تجريبية، ويمكن باستعمال المجلد ذاك دعم التخطيطات layouts والوجهات المتداخلة nested routes واستعمال مكونات خادم Server افتراضيًا، كما يمكنك جلب بيانات تُستعمل في كل تطبيقك. | |||
تستخدم Next.js المكوّن <code>App</code> لتهيئة الصفحات، وتتيح لك تخصيص هذا المكوّن والتحكم بتهيئة الصفحات كما تريد، مما يجعلك قادرًا على تنفيذ أشياء مفيدة حقًا مثل: | |||
* المحافظة على التخطيط عند التنقل بين الصفحات. | * المحافظة على التخطيط عند التنقل بين الصفحات. | ||
* المحافظة على حالة | * المحافظة على حالة عند التنقل بين الصفحات. | ||
* التعامل المخصص مع الأخطاء باستخدام <code>componentDidCatch</code>. | * التعامل المخصص مع الأخطاء باستخدام <code>componentDidCatch</code>. | ||
* الدفع ببيانات إضافية | * الدفع ببيانات إضافية إلى الصفحات. | ||
* إضافة [[Next.js/built in css support|تنسيقات CSS عامة.]] | * إضافة [[Next.js/built in css support|تنسيقات CSS عامة.]] | ||
لإلغاء المكوّن الافتراضي <code>App</code>، | لإلغاء المكوّن الافتراضي <code>App</code>، أنشئ الملف <code>pages/_app.js/.</code> كما يلي:<syntaxhighlight lang="javascript"> | ||
// import App from 'next/app' | // import App from 'next/app' | ||
سطر 17: | سطر 18: | ||
// أزل إشارة التعليق عن هذه الطريقة فقط إن احتاجت كل صفحة معلومات محجوبة | // أزل إشارة التعليق عن هذه الطريقة فقط إن احتاجت كل صفحة معلومات محجوبة | ||
// فسيعطل ذلك القدرة على التحسين التلقائي الساكن ويجعل كل صفح من صفحات | // فسيعطل ذلك القدرة على التحسين التلقائي الساكن ويجعل كل صفح من صفحات | ||
// التطبيق مصيرة من جانب الخادم | // التطبيق مصيرة من جانب الخادم | ||
// MyApp.getInitialProps = async (appContext) => { | // MyApp.getInitialProps = async (appContext) => { | ||
// // calls page's `getInitialProps` and fills `appProps.pageProps` | // // calls page's `getInitialProps` and fills `appProps.pageProps` | ||
سطر 26: | سطر 27: | ||
export default MyApp | export default MyApp | ||
</syntaxhighlight>يُمثِّل الكائن <code>Component</code> الصفحة المعروضة (المفعّلة) <code>page</code>، وعندما تنتقل بين صفحات التطبيق سيتغير <code>Component</code> إلى الصفحة الجديدة، وبالتالي فإن أية خاصيات ترسلها إليه ستستقبلها الصفحة. ويضم الكائن <code>pageProps</code> الخاصيات الأساسية التي تُحمَّل مسبقًا لكل صفحة من صفحات التطبيق باستخدام إحدى [[Next.js/data fetching|طرق إحضار البيانات]] وإن لم تكن هناك بيانات، فسيكون | </syntaxhighlight>يُمثِّل الكائن <code>Component</code> الصفحة المعروضة (المفعّلة) <code>page</code>، وعندما تنتقل بين صفحات التطبيق سيتغير <code>Component</code> إلى الصفحة الجديدة، وبالتالي فإن أية خاصيات ترسلها إليه ستستقبلها الصفحة. ويضم الكائن <code>pageProps</code> الخاصيات الأساسية التي تُحمَّل مسبقًا لكل صفحة من صفحات التطبيق باستخدام إحدى [[Next.js/data fetching|طرق إحضار البيانات]]، وإن لم تكن هناك بيانات، فسيكون الكائن فارغًا. | ||
يتلقى الكائن وسيطًا واحدًا | يتلقى الكائن <code>App.getInitialProps</code> وسيطًا واحدًا يُدعى <code>context.ctx</code>، وهو كائن له نفس مجموعة الخاصيات الكائن <code>[[Next.js/data fetching|context]]</code> في <code>getInitialProps</code>. | ||
== | == محاذير== | ||
* إن أضفت المكوّن وتطبيقك يعمل، ستُضطر إلى إعادة تشغيل خادم التطوير في حال لم يكن الملف <code>pages/_app.js</code>موجودًا. | * إن أضفت المكوّن <code>App</code> وتطبيقك يعمل، ستُضطر إلى إعادة تشغيل خادم التطوير في حال لم يكن الملف <code>pages/_app.js</code> موجودًا. | ||
* يُعطِّل إضافة دالة <code>getInitialProps</code> مخصصة إلى المكوّن <code>App</code> [[Next.js/automatic static optimization|التحسين التلقائي الساكن]] في الصفحات التي لا تضم شيفرة التوليد الساكن. | * يُعطِّل إضافة دالة <code>getInitialProps</code> مخصصة إلى المكوّن <code>App</code> [[Next.js/automatic static optimization|التحسين التلقائي الساكن]] في الصفحات التي لا تضم شيفرة التوليد الساكن. | ||
* عليك إضافة السطر البرمجي <code>"import App from "next/app"</code> | * عليك إضافة السطر البرمجي <code>"import App from "next/app"</code> واستدعاء الدالة <code>App.getInitialProps(appContext)</code> ضمن الدالة <code>getInitialProps</code> ودمج الكائن المُعاد ضمن القيمة المعادة إن قررت إضافة <code>getInitialProps</code> إلى المكوّن <code>App</code>. | ||
* لا يدعم المكوّن <code>App</code> حاليًا طرق إحضار البيانات في مثل <code>getStaticProps</code> أو <code>getServerSideProps</code>. | * لا يدعم المكوّن <code>App</code> حاليًا طرق إحضار البيانات في Next.js مثل <code>getStaticProps</code> أو <code>getServerSideProps</code>. | ||
== دعم TypeScript == | |||
إن كنت تستخدم TypeScript، اطلع على [[Next.js/typescript#.D8.A7.D8.B3.D8.AA.D8.AE.D8.AF.D8.A7.D9.85%20.D8.A7.D9.84.D8.A3.D9.86.D9.88.D8.A7.D8.B9%20.D9.85.D8.B9%20.D8.A7.D9.84.D8.AA.D8.B7.D8.A8.D9.8A.D9.82.D8.A7.D8.AA%20.D8.A7.D9.84.D9.85.D8.AE.D8.B5.D8.B5.D8.A9%20.D9.81.D9.8A%20Next.js|توثيق استخدام TypeScript]] في Next.js. | إن كنت تستخدم TypeScript، اطلع على [[Next.js/typescript#.D8.A7.D8.B3.D8.AA.D8.AE.D8.AF.D8.A7.D9.85%20.D8.A7.D9.84.D8.A3.D9.86.D9.88.D8.A7.D8.B9%20.D9.85.D8.B9%20.D8.A7.D9.84.D8.AA.D8.B7.D8.A8.D9.8A.D9.82.D8.A7.D8.AA%20.D8.A7.D9.84.D9.85.D8.AE.D8.B5.D8.B5.D8.A9%20.D9.81.D9.8A%20Next.js|توثيق استخدام TypeScript]] في Next.js. | ||
== اقرأ أيضًا == | |||
* [[Next.js/automatic static optimization|التحسين التلقائي الساكن في Next.js]] | |||
* [[Next.js/custom error page|صفحات مخصصة لعرض الأخطاء]] | |||
* [[Next.js/custom document|المستندات المخصصة في Next.js باستخدام المكوّن <code>document</code>]] | |||
* [[Next.js/custom server|استخدام خادم مخصص في Next.js]] | |||
== المصادر == | == المصادر == | ||
* الصفحة Custom App من توثيق Next.js الرسمي. | * الصفحة [https://nextjs.org/docs/advanced-features/custom-app Custom App] من توثيق Next.js الرسمي. | ||
[[تصنيف:Next.js|{{SUBPAGENAME}}]] | |||
[[تصنيف:Next.js Advanced Features|{{SUBPAGENAME}}]] | |||
المراجعة الحالية بتاريخ 17:08، 3 يناير 2023
ملاحظة: بدأت Next.js في الإصدار 13 دعم استخدام المجلد /app
كنسخة تجريبية، ويمكن باستعمال المجلد ذاك دعم التخطيطات layouts والوجهات المتداخلة nested routes واستعمال مكونات خادم Server افتراضيًا، كما يمكنك جلب بيانات تُستعمل في كل تطبيقك.
تستخدم Next.js المكوّن App
لتهيئة الصفحات، وتتيح لك تخصيص هذا المكوّن والتحكم بتهيئة الصفحات كما تريد، مما يجعلك قادرًا على تنفيذ أشياء مفيدة حقًا مثل:
- المحافظة على التخطيط عند التنقل بين الصفحات.
- المحافظة على حالة عند التنقل بين الصفحات.
- التعامل المخصص مع الأخطاء باستخدام
componentDidCatch
. - الدفع ببيانات إضافية إلى الصفحات.
- إضافة تنسيقات CSS عامة.
لإلغاء المكوّن الافتراضي App
، أنشئ الملف pages/_app.js/.
كما يلي:
// import App from 'next/app'
function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />
}
// أزل إشارة التعليق عن هذه الطريقة فقط إن احتاجت كل صفحة معلومات محجوبة
// فسيعطل ذلك القدرة على التحسين التلقائي الساكن ويجعل كل صفح من صفحات
// التطبيق مصيرة من جانب الخادم
// MyApp.getInitialProps = async (appContext) => {
// // calls page's `getInitialProps` and fills `appProps.pageProps`
// const appProps = await App.getInitialProps(appContext);
//
// return { ...appProps }
// }
export default MyApp
يُمثِّل الكائن Component
الصفحة المعروضة (المفعّلة) page
، وعندما تنتقل بين صفحات التطبيق سيتغير Component
إلى الصفحة الجديدة، وبالتالي فإن أية خاصيات ترسلها إليه ستستقبلها الصفحة. ويضم الكائن pageProps
الخاصيات الأساسية التي تُحمَّل مسبقًا لكل صفحة من صفحات التطبيق باستخدام إحدى طرق إحضار البيانات، وإن لم تكن هناك بيانات، فسيكون الكائن فارغًا.
يتلقى الكائن App.getInitialProps
وسيطًا واحدًا يُدعى context.ctx
، وهو كائن له نفس مجموعة الخاصيات الكائن context
في getInitialProps
.
محاذير
- إن أضفت المكوّن
App
وتطبيقك يعمل، ستُضطر إلى إعادة تشغيل خادم التطوير في حال لم يكن الملفpages/_app.js
موجودًا. - يُعطِّل إضافة دالة
getInitialProps
مخصصة إلى المكوّنApp
التحسين التلقائي الساكن في الصفحات التي لا تضم شيفرة التوليد الساكن. - عليك إضافة السطر البرمجي
"import App from "next/app"
واستدعاء الدالةApp.getInitialProps(appContext)
ضمن الدالةgetInitialProps
ودمج الكائن المُعاد ضمن القيمة المعادة إن قررت إضافةgetInitialProps
إلى المكوّنApp
. - لا يدعم المكوّن
App
حاليًا طرق إحضار البيانات في Next.js مثلgetStaticProps
أوgetServerSideProps
.
دعم TypeScript
إن كنت تستخدم TypeScript، اطلع على توثيق استخدام TypeScript في Next.js.
اقرأ أيضًا
- التحسين التلقائي الساكن في Next.js
- صفحات مخصصة لعرض الأخطاء
- المستندات المخصصة في Next.js باستخدام المكوّن
document
- استخدام خادم مخصص في Next.js
المصادر
- الصفحة Custom App من توثيق Next.js الرسمي.