المكون AppRegistry في ReactNative

من موسوعة حسوب
مراجعة 07:50، 6 مارس 2021 بواسطة جميل-بيلوني (نقاش | مساهمات) (مراجعة وتصحيح الترجمة)

ملاحظة: إذا كنت تستخدم expo-cli فلا يوجد سوى مكوّن إدخال واحد مسجل مسبقًا في AppRegistry ويُتعامل معه تلقائيًا، لذلك فلا حاجة لاستخدام واجهة برمجة التطبيقات (API) هذه.

يُمثل AppRegistry نقطة دخول جافا سكريبت لتشغيل جميع تطبيقات React Native. ويجب تسجيل جميع مكونات التطبيق الجذرية مع AppRegistry.registerComponent، ومن ثم يتمكن النظام الأصلي من تحميل التطبيق وتشغيله عن طريق استدعاء الدالة AppRegistry.runApplication.

import { Text, AppRegistry } from 'react-native';

const App = (props) => (
  <View>
    <Text>App1</Text>
  </View>
);

AppRegistry.registerComponent('Appname', () => App);

لإيقاف التطبيق عند ازالة واجهة معيّنة (View)، استدعي الدالة AppRegistry.unmountApplicationComponenetAtRootTag على الوسم الذي مُرّرت سابقًا للدالة runApplication.

يجب أن يكون AppRegistry مطلوبًا في بداية سلسلة المطلوبات require للتأكد من إعداد بيئة التنفيذ إعدادًا صحيحًا قبل أن تكون هناك حاجة لوحدات أخرى.

الدوال

setWrapperComponentProvider

static setWrapperComponenetProvider(provider)

المعاملات

الاسم النوع مطلوب
provider ComponentProvider نعم

enableArchitectureIndicator

static enableArchitectureIndicator(enabled)

المعاملات

الاسم النوع مطلوب
enabled قيمة منطقية (boolean) نعم

registerConfig

static registerConfig([config])

المعاملات

الاسم النوع مطلوب
config AppConfig نعم

المفاتيح الصالحة للاستخدام مع AppConfig:

الاسم النوع مطلوب
appKey سلسلة نصية (string) نعم
component ComponentProvider لا
run دالة (function) لا
section قيمة منطقية (bool) لا

‎registerComponent()‎

static registerComponent(appKey, componentProvider, section?)

المعاملات

الاسم النوع مطلوب
appKey سلسلة نصية (string) نعم
componenetProvider ComponentProvider نعم
section قيمة منطقية (bool) لا

‎registerRunnable()‎

static registerRunnable(appKey, run)

المعاملات

الاسم النوع مطلوب
appKey سلسلة نصية (string) نعم
run دالة (function) نعم

registerSection

static registerSection(appKey, component)

المعاملات

الاسم النوع مطلوب
appKey سلسلة نصية (string) نعم
component ComponentProvider نعم

getAppKeys

static getAppKeys()

تُرجع مصفوفة من AppKeys.

‎getSectionKeys()‎

static getSectionKeys()

تُرجع مصفوفة من sectionKeys.

‎getSections()‎

static getSections()

تُرجع جميع كائنات Runnables، وهي كائنات يحتوي كلّ واحد منها على مفتاح (AppKey) وقيمة من نوع Runnable والتي تتكون من:

  • مكوّن (ComponentProvider).
  • دالة تشغيل (run).

‎getRunnable()‎

static getRunnable(appKey)

تُرجع كائنًا من النوع Runnable، ويتكون من:

  • مكون (ComponentProvider).
  • دالة تشغيل (run)

‎getRegistry()‎

static getRegistry()

تُرجع الكائن Registry والذي يحتوي على:

  • sections (مصفوفة من سلاسل نصية)
  • runnables (دوال قابلة للتشغيل [Runnables])

‎setComponentProviderInstrumentationHook()‎

static setComponentProviderInstrumentationHook(hook)

المعاملات

الاسم النوع مطلوب
hook دالة (function) نعم

يحتوي الخطاف hook على المكونات التالية:

  • component من النوع ComponentProvider (مطلوب).
  • ScopedPerformanceLoggerمن النوع IPerformanceLogger (مطلوب).

تُرجع الدالة hook مكوِّن React.

runApplication

static runApplication(appKey, appParameters)

تُحمِّل حزمة تشغيل جافاسكربت للتطبيق ثم تشغِّله.

المعاملات

الاسم النوع مطلوب
appKey سلسلة نصية (string) نعم
appParameters any نعم

unmountApplicationComponentAtRootTag

static unmountApplicationComponentAtRootTag(rootTag)

توقِف التطبيق عند وجوب تدمير واجهة معينة.

المعاملات

الاسم النوع مطلوب
rootTag عدد (number) نعم

‎registerHeadlessTask()‎

static registerHeadlessTask(taskKey, taskProvider)

تسجل عملية في الخلفية بلا واجهة (تدعى headless task) هي شيفرة تُنفَّذ دون واجهة مستخدم. يعد المعامل taskKey المفتاح المرتبط بتلك العملية، ويعد المعامل taskProvider وعدًا (promise) يُرجع دالة تأخذ بيانات من الطرف الأصيل من الهاتف (native side) على أنه الوسيط الوحيد. وبعد أن يرفض الوعد أو يُحَل، يُرسل إشعار للجانب الأصيل وقد يقرر تدمير سياق جافاسكريبت الحالي (JS context).

تُستعمل هذه الدالة لتشغيل بعض المهام في التطبيق أثناء عمله في الخلفية، لمزامنة البيانات أو التعامل مع الإشعارات الفورية أو تشغيل الموسيقى مثلًا.

المعاملات

الاسم النوع مطلوب
taskKey سلسلة نصية (string) نعم
taskProvider TaskProvider نعم
  • يعد TaskProvider المطلوب دالة تُرجع الدالة Task.
  • الدالة Task تأخذ بيانات وسيطة وتُرجع وعدًا Promise يتم استيفاؤه (قبوله أو حله) على أنه undefined.

‎registerCancellableHeadlessTask()‎

static registerCancellableHeadlessTask(taskKey, taskProvider, taskCancelProvider)

تسجل عملية في الخلفية بلا واجهة (تدعى headless task) قابلة للإلغاء، وتلك العملية هي شيفرة تُنفّد بدون واجهة مستخدِم، حيث يعد المعامل taskKey المفتاح المرتبط بتلك العملية ويعد المعامل taskProvider وعدًا (promise) يُرجع دالة تأخذ بيانات من الطرف الأصيل من الهاتف (native side) على أنه الوسيط الوحيد. وبعد أن يرفض الوعد أو يُحَل، يُرسل إشعار للجانب الأصيل وقد يقرر تدمير سياق جافاسكريبت الحالي (JS context). المعامل taskCancelProvider دالة تُرجع دالة لا تأخذ معاملات، يغلفها taskProvider ثم يعيدها مباشرةً عندما يُرسل طلب الإلغاء وذلك لتنفيذها.

المعاملات

الاسم النوع مطلوب
taskKey سلسلة نصية (string) نعم
taskProvider TaskProvider نعم
taskCancelProvider TaskCancelProvider نعم
  • المعامل TaskProvider هو دالة تُرجع الدالة Task.
  • الدالة Task تأخذ بيانات مثل معاملات وتُرجع Promise.
  • الدالة TaskCancelProvider تُرجع TaskCanceller.
  • الدالة TaskCanceller لا تأخذ معاملات ولا ترجع شيئًا.

startHeadlessTask

static startHeadlessTask(taskId, taskKey, data)

تُستدعى من الشيفرة الأصلية (native code)، وتبدأ تنفيذ headless task.

المعامل taskId هو المُعرِّف الخاص بالمهمة المُراد بدؤها، والمعامل taskKey هو المفتاح الخاص بها، أمّا المعامل data فهو البيانات التي يجب إرسالها للمهمة المراد تنفيذها.

المعاملات

الاسم النوع مطلوب
taskId عدد (number) نعم
taskKey سلسلة نصية (string) نعم
data any نعم

‎cancelHeadlessTask()‎

static cancelHeadlessTask(taskId, taskKey)

تُستدعى من الشيفرة الأصلية، وتلغي تنفيذ عملية خلفية بلا واجهة (headless task).

المعامل taskId هو المُعرِّف الخاص بالمهمة المُراد إلغاء تنفيذها (وهي المهمة التي بدأت عند استدعاء الدالة startHeadlessTask، والمعامل taskKey هو المفتاح الخاص بها.

المعاملات

الاسم النوع مطلوب
taskId عدد (number) نعم
taskKey سلسلة نصية (string) نعم
data any نعم

المصادر

صفحة AppRegistry في توثيق React Native الرسمي.