الفرق بين المراجعتين لصفحة: «ReactNative/fast refresh»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) طلا ملخص تعديل |
||
(مراجعتان متوسطتان بواسطة مستخدمين اثنين آخرين غير معروضتين) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:التحديث السريع في React Native}}</noinclude> | |||
التحديث السريع هو ميزة [[ReactNative|React Native]] التي تسمح لك بالحصول على ردود فعل شبه فورية عن تغييرات مكونات [[React]] الخاصة بك. يُفعَّل التحديث السريع افتراضيًا، ويمكنك تبديل "تفعيل التحديث السريع Enable Fast Refresh" في قائمة مطور React Native، ويجب أن تكون معظم التعديلات مرئية في غضون ثانية أو ثانيتين عند تفعيل هذه الميزة. | التحديث السريع Fast Refresh هو ميزة [[ReactNative|React Native]] التي تسمح لك بالحصول على ردود فعل شبه فورية عن تغييرات مكونات [[React]] الخاصة بك. يُفعَّل التحديث السريع افتراضيًا، ويمكنك تبديل "تفعيل التحديث السريع Enable Fast Refresh" في قائمة مطور React Native، ويجب أن تكون معظم التعديلات مرئية في غضون ثانية أو ثانيتين عند تفعيل هذه الميزة. | ||
== كيفية عمل ميزة التحديث السريع == | |||
* إن عدّلتَ وحدةً تصدّر مكوّن (أو مكونات) React فقط، فستحدّث ميزة التحديث السريع شيفرة تلك الوحدة فقط، وتعيد تصيير مكوّنك. يمكنك تعديل أي شيء في هذا الملف، بما في ذلك الأنماط styles أو منطق التصيير rendering logic أو معالجات الأحداث أو التأثيرات. | * إن عدّلتَ وحدةً تصدّر مكوّن (أو مكونات) React فقط، فستحدّث ميزة التحديث السريع شيفرة تلك الوحدة فقط، وتعيد تصيير مكوّنك. يمكنك تعديل أي شيء في هذا الملف، بما في ذلك الأنماط styles أو منطق التصيير rendering logic أو معالجات الأحداث أو التأثيرات. | ||
سطر 8: | سطر 8: | ||
* أخيرًا، إذا عدّلتَ ملفًا استوردته وحدات خارج شجرة React، فسيعود التحديث السريع إلى إجراء إعادة تحميل كاملة. قد يكون لديك ملف يصيِّر مكوّن React، ولكنه يصدّر أيضًا قيمة يستوردها مكوّن ليس مكون React. قد يصدّر مكوّنك أيضًا ثابتًا constant، وتستورده وحدة ليست وحدة React. ضع في حساباتك في هذه الحالة تهجير migrating الاستعلام إلى ملف منفصل واستيراده في كلا الملفين، وسيؤدي ذلك إلى إعادة تفعيل التحديث السريع، ويمكن حل مشاكل الحالات الأخرى بطريقة مماثلة. | * أخيرًا، إذا عدّلتَ ملفًا استوردته وحدات خارج شجرة React، فسيعود التحديث السريع إلى إجراء إعادة تحميل كاملة. قد يكون لديك ملف يصيِّر مكوّن React، ولكنه يصدّر أيضًا قيمة يستوردها مكوّن ليس مكون React. قد يصدّر مكوّنك أيضًا ثابتًا constant، وتستورده وحدة ليست وحدة React. ضع في حساباتك في هذه الحالة تهجير migrating الاستعلام إلى ملف منفصل واستيراده في كلا الملفين، وسيؤدي ذلك إلى إعادة تفعيل التحديث السريع، ويمكن حل مشاكل الحالات الأخرى بطريقة مماثلة. | ||
== مرونة التعامل مع الأخطاء == | |||
إن ارتكبت خطأ صياغيًا أثناء جلسة التحديث السريع، فيمكنك إصلاحه وحفظ الملف مرة أخرى، وسيختفي الصندوق الأحمر الذي يدل على وجود خطأ. تُمنَع الوحدات التي بها أخطاء صياغية من العمل، لذا لن تحتاج إلى إعادة تحميل التطبيق. | إن ارتكبت خطأ صياغيًا أثناء جلسة التحديث السريع، فيمكنك إصلاحه وحفظ الملف مرة أخرى، وسيختفي الصندوق الأحمر الذي يدل على وجود خطأ. تُمنَع الوحدات التي بها أخطاء صياغية من العمل، لذا لن تحتاج إلى إعادة تحميل التطبيق. | ||
سطر 17: | سطر 17: | ||
إن كانت لديك حدود خطأ error boundaries في تطبيقك (وهي فكرة جيدة للإخفاقات الرشيقة في الإنتاج)، فستحاول هذه الحدود إعادة التصيير في التعديل التالي بعد المربع الأحمر، فإن وجود حد خطأ يمكن أن يمنعك من الانتقال دائمًا إلى شاشة جذر التطبيق. لكن ضع في بالك أن حدود الخطأ لا ينبغي أن تكون دقيقة للغاية، وتستخدمها مكتبة React في الإنتاج، ويجب دائمًا تصميمها لهدف ما. | إن كانت لديك حدود خطأ error boundaries في تطبيقك (وهي فكرة جيدة للإخفاقات الرشيقة في الإنتاج)، فستحاول هذه الحدود إعادة التصيير في التعديل التالي بعد المربع الأحمر، فإن وجود حد خطأ يمكن أن يمنعك من الانتقال دائمًا إلى شاشة جذر التطبيق. لكن ضع في بالك أن حدود الخطأ لا ينبغي أن تكون دقيقة للغاية، وتستخدمها مكتبة React في الإنتاج، ويجب دائمًا تصميمها لهدف ما. | ||
== تقييدات == | |||
يحاول التحديث السريع الحفاظ على حالة React المحلية في المكوّن الذي تعدّله فقط إن كان ذلك آمنًا. فيما يلي بعض الأسباب التي قد تسبّب إعادة ضبط الحالة المحلية في كل عملية تعديل لملف: | يحاول التحديث السريع الحفاظ على حالة React المحلية في المكوّن الذي تعدّله فقط إن كان ذلك آمنًا. فيما يلي بعض الأسباب التي قد تسبّب إعادة ضبط الحالة المحلية في كل عملية تعديل لملف: | ||
سطر 26: | سطر 26: | ||
يمكنك توقّع الاحتفاظ بالحالة في المزيد من الحالات على المدى الطويل ومع انتقال المزيد من قاعدة شيفرتك إلى مكونات الدالة والخطافات. | يمكنك توقّع الاحتفاظ بالحالة في المزيد من الحالات على المدى الطويل ومع انتقال المزيد من قاعدة شيفرتك إلى مكونات الدالة والخطافات. | ||
== نصائح == | |||
* يحافظ التحديث السريع على حالة React المحلية في مكونات الدالة (والخطافات) افتراضيًا. | * يحافظ التحديث السريع على حالة React المحلية في مكونات الدالة (والخطافات) افتراضيًا. | ||
* قد ترغب أحيانًا في إجبار الحالة ليُعاد ضبطها، ويُعاد تحميل أحد المكوّنات. يمكن أن يكون هذا مفيدًا إذا عدّلتَ حركةً تحدث فقط عند التثبيت على سبيل المثال، ويمكن تنفيذ ذلك من خلال إضافة <code>refresh reset | * قد ترغب أحيانًا في إجبار الحالة ليُعاد ضبطها، ويُعاد تحميل أحد المكوّنات. يمكن أن يكون هذا مفيدًا إذا عدّلتَ حركةً تحدث فقط عند التثبيت على سبيل المثال، ويمكن تنفيذ ذلك من خلال إضافة <code>// @refresh reset</code> في أي مكان ضمن الملف الذي تعدّله. هذا التوجيه محلي للملف، ويوجّه التحديث السريع لإعادة تحميل المكونات المحدَّدة في هذا الملف في كل تعديل. | ||
== التحديث السريع والخطافات Hooks == | |||
يحاول التحديث السريع الحفاظ على حالة مكونك بين عمليات التعديلات إن أمكن ذلك، إذ يحتفظ <code>useState</code> و <code>useRef</code> بقيمهما السابقة طالما لم يتغير الوسطاء أو ترتيب استدعاءات الخطاف الخاصة بها. | يحاول التحديث السريع الحفاظ على حالة مكونك بين عمليات التعديلات إن أمكن ذلك، إذ يحتفظ <code>useState</code> و <code>useRef</code> بقيمهما السابقة طالما لم يتغير الوسطاء أو ترتيب استدعاءات الخطاف الخاصة بها. | ||
سطر 43: | سطر 43: | ||
* [https://reactnative.dev/docs/fast-refresh صفحة Fast Refresh في توثيق React Native الرسمي.] | * [https://reactnative.dev/docs/fast-refresh صفحة Fast Refresh في توثيق React Native الرسمي.] | ||
[[تصنيف:ReactNative]] | |||
[[تصنيف:React Native Docs]] |
المراجعة الحالية بتاريخ 13:39، 9 أكتوبر 2021
التحديث السريع Fast Refresh هو ميزة React Native التي تسمح لك بالحصول على ردود فعل شبه فورية عن تغييرات مكونات React الخاصة بك. يُفعَّل التحديث السريع افتراضيًا، ويمكنك تبديل "تفعيل التحديث السريع Enable Fast Refresh" في قائمة مطور React Native، ويجب أن تكون معظم التعديلات مرئية في غضون ثانية أو ثانيتين عند تفعيل هذه الميزة.
كيفية عمل ميزة التحديث السريع
- إن عدّلتَ وحدةً تصدّر مكوّن (أو مكونات) React فقط، فستحدّث ميزة التحديث السريع شيفرة تلك الوحدة فقط، وتعيد تصيير مكوّنك. يمكنك تعديل أي شيء في هذا الملف، بما في ذلك الأنماط styles أو منطق التصيير rendering logic أو معالجات الأحداث أو التأثيرات.
- إن عدّلتَ وحدةً بها عمليات تصدير ليست من مكوّنات React، فسيعيد التحديث السريع تشغيل تلك الوحدة والوحدات الأخرى التي تستوردها، لذلك إذا استورد المكونان
Button.js
وModal.js
المكوّنTheme.js
، فسيؤدي تحريرTheme.js
إلى تحديث كلا المكوّنين. - أخيرًا، إذا عدّلتَ ملفًا استوردته وحدات خارج شجرة React، فسيعود التحديث السريع إلى إجراء إعادة تحميل كاملة. قد يكون لديك ملف يصيِّر مكوّن React، ولكنه يصدّر أيضًا قيمة يستوردها مكوّن ليس مكون React. قد يصدّر مكوّنك أيضًا ثابتًا constant، وتستورده وحدة ليست وحدة React. ضع في حساباتك في هذه الحالة تهجير migrating الاستعلام إلى ملف منفصل واستيراده في كلا الملفين، وسيؤدي ذلك إلى إعادة تفعيل التحديث السريع، ويمكن حل مشاكل الحالات الأخرى بطريقة مماثلة.
مرونة التعامل مع الأخطاء
إن ارتكبت خطأ صياغيًا أثناء جلسة التحديث السريع، فيمكنك إصلاحه وحفظ الملف مرة أخرى، وسيختفي الصندوق الأحمر الذي يدل على وجود خطأ. تُمنَع الوحدات التي بها أخطاء صياغية من العمل، لذا لن تحتاج إلى إعادة تحميل التطبيق.
إن ارتكبت خطأ وقت التشغيل أثناء تهيئة الوحدة (مثل كتابة Style.create
بدلًا من StyleSheet.create
)، فستُستكمَل جلسة التحديث السريع بمجرد إصلاح الخطأ. سيختفي الصندوق الأحمر ، وستُحدَّث الوحدة.
إن ارتكبت خطأ أدى إلى حدوث خطأ في وقت التشغيل داخل مكونك، فستُستكمَل جلسة التحديث السريع أيضًا بعد إصلاح الخطأ. ستعيد مكتبة React في هذه الحالة تحميل تطبيقك باستخدام الشيفرة المُحدَّثة.
إن كانت لديك حدود خطأ error boundaries في تطبيقك (وهي فكرة جيدة للإخفاقات الرشيقة في الإنتاج)، فستحاول هذه الحدود إعادة التصيير في التعديل التالي بعد المربع الأحمر، فإن وجود حد خطأ يمكن أن يمنعك من الانتقال دائمًا إلى شاشة جذر التطبيق. لكن ضع في بالك أن حدود الخطأ لا ينبغي أن تكون دقيقة للغاية، وتستخدمها مكتبة React في الإنتاج، ويجب دائمًا تصميمها لهدف ما.
تقييدات
يحاول التحديث السريع الحفاظ على حالة React المحلية في المكوّن الذي تعدّله فقط إن كان ذلك آمنًا. فيما يلي بعض الأسباب التي قد تسبّب إعادة ضبط الحالة المحلية في كل عملية تعديل لملف:
- لا يُحتفَظ بالحالة المحلية لمكونات الصنف (تحتفظ فقط مكونات الدالة والخطافات بالحالة).
- قد تحتوي الوحدة التي تعدّلها على عمليات تصدير أخرى بالإضافة إلى مكوّن React.
- تصدّر الوحدة أحيانًا نتيجة استدعاء مكون ذي ترتيب أعلى مثل
createNavigationContainer(MyScreen)
. إذا كان المكون المُعاد صنفًا، فسيُعاد ضبط الحالة.
يمكنك توقّع الاحتفاظ بالحالة في المزيد من الحالات على المدى الطويل ومع انتقال المزيد من قاعدة شيفرتك إلى مكونات الدالة والخطافات.
نصائح
- يحافظ التحديث السريع على حالة React المحلية في مكونات الدالة (والخطافات) افتراضيًا.
- قد ترغب أحيانًا في إجبار الحالة ليُعاد ضبطها، ويُعاد تحميل أحد المكوّنات. يمكن أن يكون هذا مفيدًا إذا عدّلتَ حركةً تحدث فقط عند التثبيت على سبيل المثال، ويمكن تنفيذ ذلك من خلال إضافة
// @refresh reset
في أي مكان ضمن الملف الذي تعدّله. هذا التوجيه محلي للملف، ويوجّه التحديث السريع لإعادة تحميل المكونات المحدَّدة في هذا الملف في كل تعديل.
التحديث السريع والخطافات Hooks
يحاول التحديث السريع الحفاظ على حالة مكونك بين عمليات التعديلات إن أمكن ذلك، إذ يحتفظ useState
و useRef
بقيمهما السابقة طالما لم يتغير الوسطاء أو ترتيب استدعاءات الخطاف الخاصة بها.
ستُحدَّث الخطافات ذات الاعتماديات مثل useEffect
و useMemo
و useCallback
أثناء التحديث السريع، وستُهمَل قائمة الاعتماديات الخاصة بها أثناء إجراء التحديث السريع.
إذا عدّلتَ useMemo(() => x * 2, [x])
لتصبح useMemo(() => x * 10, [x])
مثلًا، فإنها ستنفّذ على الرغم من x
(الاعتمادية) لم تتغير. إن لم تفعل مكتبة React ذلك، فلن ينعكس تعديلك على الشاشة.
يمكن أن يؤدي ذلك إلى نتائج غير متوقعة أحيانًا، حيث سيبقى useEffect
الذي يحتوي على مصفوفة فارغة من الاعتماديات يُعاد تشغيله مرة واحدة أثناء التحديث السريع. لكن كتابة الشيفرة المرنة لإعادة تشغيل useEffect
من حين لآخر هي ممارسة جيدة حتى بدون التحديث السريع، فهذا يسهّل عليك إدخال اعتماديات جديدة إليه لاحقًا.